* [PATCH v6 0/5] drm/xe: Privatize struct xe_ggtt.
@ 2026-01-26 10:45 Maarten Lankhorst
2026-01-26 10:46 ` [PATCH v6 1/5] drm/xe: Make xe_ggtt_node offset relative to starting offset Maarten Lankhorst
` (8 more replies)
0 siblings, 9 replies; 15+ messages in thread
From: Maarten Lankhorst @ 2026-01-26 10:45 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Maarten Lankhorst
Clean up SR-IOV VF handling and pop the balloons, move struct xe_ggtt to xe_ggtt.c,
and clean up the API's slightly by removing a separate xe_gtt_node_init() step.
This makes the xe_ggtt_node_allocated obsolete, as we only create allocated nodes now.
Updated based on review feedback.
Maarten Lankhorst (5):
drm/xe: Make xe_ggtt_node offset relative to starting offset
drm/xe: Rewrite GGTT VF initialization
drm/xe: Move struct xe_ggtt to xe_ggtt.c
drm/xe: Make xe_ggtt_node_insert return a node
drm/xe: Remove xe_ggtt_node_allocated
drivers/gpu/drm/xe/display/xe_fb_pin.c | 5 +-
drivers/gpu/drm/xe/tests/xe_guc_buf_kunit.c | 6 +-
drivers/gpu/drm/xe/xe_device_types.h | 2 -
drivers/gpu/drm/xe/xe_ggtt.c | 358 ++++++++------------
drivers/gpu/drm/xe/xe_ggtt.h | 14 +-
drivers/gpu/drm/xe/xe_ggtt_types.h | 60 +---
drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c | 36 +-
drivers/gpu/drm/xe/xe_gt_sriov_vf.c | 37 +-
drivers/gpu/drm/xe/xe_tile_sriov_vf.c | 198 +----------
drivers/gpu/drm/xe/xe_tile_sriov_vf.h | 3 -
10 files changed, 194 insertions(+), 525 deletions(-)
--
2.51.0
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH v6 1/5] drm/xe: Make xe_ggtt_node offset relative to starting offset
2026-01-26 10:45 [PATCH v6 0/5] drm/xe: Privatize struct xe_ggtt Maarten Lankhorst
@ 2026-01-26 10:46 ` Maarten Lankhorst
2026-01-26 21:01 ` Michal Wajdeczko
2026-01-26 10:46 ` [PATCH v6 2/5] drm/xe: Rewrite GGTT VF initialization Maarten Lankhorst
` (7 subsequent siblings)
8 siblings, 1 reply; 15+ messages in thread
From: Maarten Lankhorst @ 2026-01-26 10:46 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Maarten Lankhorst
Fix all functions that use node->start to use xe_ggtt_node_addr,
and add ggtt->start to node->start.
This will make node shifting for SR-IOV VF a one-liner, instead of
manually changing each GGTT node's base address.
Also convert some uses of mutex_lock/unlock to mutex guards.
Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
---
Changes since last version:
- xe_assert -> xe_tile_assert
- remove extra null check
- add guard(mutex) to commit message.
---
drivers/gpu/drm/xe/xe_ggtt.c | 53 +++++++++++++++++++++---------------
1 file changed, 31 insertions(+), 22 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_ggtt.c b/drivers/gpu/drm/xe/xe_ggtt.c
index 60665ad1415be..5c11df67b589e 100644
--- a/drivers/gpu/drm/xe/xe_ggtt.c
+++ b/drivers/gpu/drm/xe/xe_ggtt.c
@@ -299,7 +299,7 @@ static void __xe_ggtt_init_early(struct xe_ggtt *ggtt, u64 start, u64 size)
{
ggtt->start = start;
ggtt->size = size;
- drm_mm_init(&ggtt->mm, start, size);
+ drm_mm_init(&ggtt->mm, 0, size);
}
int xe_ggtt_init_kunit(struct xe_ggtt *ggtt, u32 start, u32 size)
@@ -401,7 +401,7 @@ static void xe_ggtt_initial_clear(struct xe_ggtt *ggtt)
/* Display may have allocated inside ggtt, so be careful with clearing here */
mutex_lock(&ggtt->lock);
drm_mm_for_each_hole(hole, &ggtt->mm, start, end)
- xe_ggtt_clear(ggtt, start, end - start);
+ xe_ggtt_clear(ggtt, ggtt->start + start, end - start);
xe_ggtt_invalidate(ggtt);
mutex_unlock(&ggtt->lock);
@@ -418,7 +418,7 @@ static void ggtt_node_remove(struct xe_ggtt_node *node)
mutex_lock(&ggtt->lock);
if (bound)
- xe_ggtt_clear(ggtt, node->base.start, node->base.size);
+ xe_ggtt_clear(ggtt, xe_ggtt_node_addr(node), xe_ggtt_node_size(node));
drm_mm_remove_node(&node->base);
node->base.size = 0;
mutex_unlock(&ggtt->lock);
@@ -570,16 +570,17 @@ int xe_ggtt_node_insert_balloon_locked(struct xe_ggtt_node *node, u64 start, u64
xe_tile_assert(ggtt->tile, IS_ALIGNED(start, XE_PAGE_SIZE));
xe_tile_assert(ggtt->tile, IS_ALIGNED(end, XE_PAGE_SIZE));
xe_tile_assert(ggtt->tile, !drm_mm_node_allocated(&node->base));
+ xe_tile_assert(ggtt->tile, start >= ggtt->start);
lockdep_assert_held(&ggtt->lock);
node->base.color = 0;
- node->base.start = start;
+ node->base.start = start - ggtt->start;
node->base.size = end - start;
err = drm_mm_reserve_node(&ggtt->mm, &node->base);
if (xe_tile_WARN(ggtt->tile, err, "Failed to balloon GGTT %#llx-%#llx (%pe)\n",
- node->base.start, node->base.start + node->base.size, ERR_PTR(err)))
+ xe_ggtt_node_addr(node), xe_ggtt_node_addr(node) + node->base.size, ERR_PTR(err)))
return err;
xe_ggtt_dump_node(ggtt, &node->base, "balloon");
@@ -770,7 +771,7 @@ static void xe_ggtt_map_bo(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
if (XE_WARN_ON(!node))
return;
- start = node->base.start;
+ start = xe_ggtt_node_addr(node);
end = start + xe_bo_size(bo);
if (!xe_bo_is_vram(bo) && !xe_bo_is_stolen(bo)) {
@@ -891,6 +892,14 @@ static int __xe_ggtt_insert_bo_at(struct xe_ggtt *ggtt, struct xe_bo *bo,
}
mutex_lock(&ggtt->lock);
+ xe_tile_assert(ggtt->tile, start >= ggtt->start || !start);
+ xe_tile_assert(ggtt->tile, end >= ggtt->start);
+
+ if (start)
+ start -= ggtt->start;
+
+ end -= ggtt->start;
+
err = drm_mm_insert_node_in_range(&ggtt->mm, &bo->ggtt_node[tile_id]->base,
xe_bo_size(bo), alignment, 0, start, end, 0);
if (err) {
@@ -1002,16 +1011,17 @@ static u64 xe_encode_vfid_pte(u16 vfid)
return FIELD_PREP(GGTT_PTE_VFID, vfid) | XE_PAGE_PRESENT;
}
-static void xe_ggtt_assign_locked(struct xe_ggtt *ggtt, const struct drm_mm_node *node, u16 vfid)
+static void xe_ggtt_assign_locked(const struct xe_ggtt_node *node, u16 vfid)
{
- u64 start = node->start;
- u64 size = node->size;
+ struct xe_ggtt *ggtt = node->ggtt;
+ u64 start = xe_ggtt_node_addr(node);
+ u64 size = xe_ggtt_node_size(node);
u64 end = start + size - 1;
u64 pte = xe_encode_vfid_pte(vfid);
lockdep_assert_held(&ggtt->lock);
- if (!drm_mm_node_allocated(node))
+ if (!xe_ggtt_node_allocated(node))
return;
while (start < end) {
@@ -1033,9 +1043,8 @@ static void xe_ggtt_assign_locked(struct xe_ggtt *ggtt, const struct drm_mm_node
*/
void xe_ggtt_assign(const struct xe_ggtt_node *node, u16 vfid)
{
- mutex_lock(&node->ggtt->lock);
- xe_ggtt_assign_locked(node->ggtt, &node->base, vfid);
- mutex_unlock(&node->ggtt->lock);
+ guard(mutex)(&node->ggtt->lock);
+ xe_ggtt_assign_locked(node, vfid);
}
/**
@@ -1057,14 +1066,14 @@ int xe_ggtt_node_save(struct xe_ggtt_node *node, void *dst, size_t size, u16 vfi
if (!node)
return -ENOENT;
- guard(mutex)(&node->ggtt->lock);
+ ggtt = node->ggtt;
+ guard(mutex)(&ggtt->lock);
if (xe_ggtt_node_pt_size(node) != size)
return -EINVAL;
- ggtt = node->ggtt;
- start = node->base.start;
- end = start + node->base.size - 1;
+ start = xe_ggtt_node_addr(node);
+ end = start + xe_ggtt_node_size(node) - 1;
while (start < end) {
pte = ggtt->pt_ops->ggtt_get_pte(ggtt, start);
@@ -1097,14 +1106,14 @@ int xe_ggtt_node_load(struct xe_ggtt_node *node, const void *src, size_t size, u
if (!node)
return -ENOENT;
- guard(mutex)(&node->ggtt->lock);
+ ggtt = node->ggtt;
+ guard(mutex)(&ggtt->lock);
if (xe_ggtt_node_pt_size(node) != size)
return -EINVAL;
- ggtt = node->ggtt;
- start = node->base.start;
- end = start + node->base.size - 1;
+ start = xe_ggtt_node_addr(node);
+ end = start + xe_ggtt_node_size(node) - 1;
while (start < end) {
vfid_pte = u64_replace_bits(*buf++, vfid, GGTT_PTE_VFID);
@@ -1211,7 +1220,7 @@ u64 xe_ggtt_read_pte(struct xe_ggtt *ggtt, u64 offset)
*/
u64 xe_ggtt_node_addr(const struct xe_ggtt_node *node)
{
- return node->base.start;
+ return node->base.start + node->ggtt->start;
}
/**
--
2.51.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v6 2/5] drm/xe: Rewrite GGTT VF initialization
2026-01-26 10:45 [PATCH v6 0/5] drm/xe: Privatize struct xe_ggtt Maarten Lankhorst
2026-01-26 10:46 ` [PATCH v6 1/5] drm/xe: Make xe_ggtt_node offset relative to starting offset Maarten Lankhorst
@ 2026-01-26 10:46 ` Maarten Lankhorst
2026-01-26 21:02 ` Michal Wajdeczko
2026-01-26 10:46 ` [PATCH v6 3/5] drm/xe: Move struct xe_ggtt to xe_ggtt.c Maarten Lankhorst
` (6 subsequent siblings)
8 siblings, 1 reply; 15+ messages in thread
From: Maarten Lankhorst @ 2026-01-26 10:46 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Maarten Lankhorst, Matthew Brost
The previous code was using a complicated system with 2 balloons to
set GGTT size and adjust GGTT offset. While it works, it's overly
complicated.
A better approach is to set the offset and size when initializing GGTT,
this removes the need for adding balloons. The resize function only
needs readjust ggtt->start to have GGTT at the new offset.
This removes the need to manipulate the internals of xe_ggtt outside
of xe_ggtt, and cleans up a lot of now unneeded code.
Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
Co-developed-by: Matthew Brost <matthew.brost@intel.com>
---
Changelog:
- Update comments and documentation.
- Rework the flow of vf_get_ggtt_info().
---
drivers/gpu/drm/xe/xe_device_types.h | 2 -
drivers/gpu/drm/xe/xe_ggtt.c | 164 +++++----------------
drivers/gpu/drm/xe/xe_ggtt.h | 5 +-
drivers/gpu/drm/xe/xe_gt_sriov_vf.c | 37 +++--
drivers/gpu/drm/xe/xe_tile_sriov_vf.c | 198 +-------------------------
drivers/gpu/drm/xe/xe_tile_sriov_vf.h | 3 -
6 files changed, 64 insertions(+), 345 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
index 34feef79fa4e7..0409fa98835e8 100644
--- a/drivers/gpu/drm/xe/xe_device_types.h
+++ b/drivers/gpu/drm/xe/xe_device_types.h
@@ -228,8 +228,6 @@ struct xe_tile {
struct xe_lmtt lmtt;
} pf;
struct {
- /** @sriov.vf.ggtt_balloon: GGTT regions excluded from use. */
- struct xe_ggtt_node *ggtt_balloon[2];
/** @sriov.vf.self_config: VF configuration data */
struct xe_tile_sriov_vf_selfconfig self_config;
} vf;
diff --git a/drivers/gpu/drm/xe/xe_ggtt.c b/drivers/gpu/drm/xe/xe_ggtt.c
index 5c11df67b589e..fecbdd71cec5d 100644
--- a/drivers/gpu/drm/xe/xe_ggtt.c
+++ b/drivers/gpu/drm/xe/xe_ggtt.c
@@ -70,8 +70,8 @@
* struct xe_ggtt_node - A node in GGTT.
*
* This struct needs to be initialized (only-once) with xe_ggtt_node_init() before any node
- * insertion, reservation, or 'ballooning'.
- * It will, then, be finalized by either xe_ggtt_node_remove() or xe_ggtt_node_deballoon().
+ * insertion or reservation.
+ * It will, then, be finalized by xe_ggtt_node_remove().
*/
struct xe_ggtt_node {
/** @ggtt: Back pointer to xe_ggtt where this region will be inserted at */
@@ -347,9 +347,15 @@ int xe_ggtt_init_early(struct xe_ggtt *ggtt)
ggtt_start = wopcm;
ggtt_size = (gsm_size / 8) * (u64)XE_PAGE_SIZE - ggtt_start;
} else {
- /* GGTT is expected to be 4GiB */
- ggtt_start = wopcm;
- ggtt_size = SZ_4G - ggtt_start;
+ ggtt_start = xe_tile_sriov_vf_ggtt_base(ggtt->tile);
+ ggtt_size = xe_tile_sriov_vf_ggtt(ggtt->tile);
+
+ if (ggtt_start < wopcm || ggtt_start > GUC_GGTT_TOP ||
+ ggtt_size > GUC_GGTT_TOP - ggtt_start) {
+ xe_tile_err(ggtt->tile, "Invalid GGTT configuration: %#llx-%#llx\n",
+ ggtt_start, ggtt_start + ggtt_size - 1);
+ return -ERANGE;
+ }
}
ggtt->gsm = ggtt->tile->mmio.regs + SZ_8M;
@@ -377,17 +383,7 @@ int xe_ggtt_init_early(struct xe_ggtt *ggtt)
if (err)
return err;
- err = devm_add_action_or_reset(xe->drm.dev, dev_fini_ggtt, ggtt);
- if (err)
- return err;
-
- if (IS_SRIOV_VF(xe)) {
- err = xe_tile_sriov_vf_prepare_ggtt(ggtt->tile);
- if (err)
- return err;
- }
-
- return 0;
+ return devm_add_action_or_reset(xe->drm.dev, dev_fini_ggtt, ggtt);
}
ALLOW_ERROR_INJECTION(xe_ggtt_init_early, ERRNO); /* See xe_pci_probe() */
@@ -538,120 +534,27 @@ static void xe_ggtt_invalidate(struct xe_ggtt *ggtt)
ggtt_invalidate_gt_tlb(ggtt->tile->media_gt);
}
-static void xe_ggtt_dump_node(struct xe_ggtt *ggtt,
- const struct drm_mm_node *node, const char *description)
-{
- char buf[10];
-
- if (IS_ENABLED(CONFIG_DRM_XE_DEBUG)) {
- string_get_size(node->size, 1, STRING_UNITS_2, buf, sizeof(buf));
- xe_tile_dbg(ggtt->tile, "GGTT %#llx-%#llx (%s) %s\n",
- node->start, node->start + node->size, buf, description);
- }
-}
-
-/**
- * xe_ggtt_node_insert_balloon_locked - prevent allocation of specified GGTT addresses
- * @node: the &xe_ggtt_node to hold reserved GGTT node
- * @start: the starting GGTT address of the reserved region
- * @end: then end GGTT address of the reserved region
- *
- * To be used in cases where ggtt->lock is already taken.
- * Use xe_ggtt_node_remove_balloon_locked() to release a reserved GGTT node.
- *
- * Return: 0 on success or a negative error code on failure.
- */
-int xe_ggtt_node_insert_balloon_locked(struct xe_ggtt_node *node, u64 start, u64 end)
-{
- struct xe_ggtt *ggtt = node->ggtt;
- int err;
-
- xe_tile_assert(ggtt->tile, start < end);
- xe_tile_assert(ggtt->tile, IS_ALIGNED(start, XE_PAGE_SIZE));
- xe_tile_assert(ggtt->tile, IS_ALIGNED(end, XE_PAGE_SIZE));
- xe_tile_assert(ggtt->tile, !drm_mm_node_allocated(&node->base));
- xe_tile_assert(ggtt->tile, start >= ggtt->start);
- lockdep_assert_held(&ggtt->lock);
-
- node->base.color = 0;
- node->base.start = start - ggtt->start;
- node->base.size = end - start;
-
- err = drm_mm_reserve_node(&ggtt->mm, &node->base);
-
- if (xe_tile_WARN(ggtt->tile, err, "Failed to balloon GGTT %#llx-%#llx (%pe)\n",
- xe_ggtt_node_addr(node), xe_ggtt_node_addr(node) + node->base.size, ERR_PTR(err)))
- return err;
-
- xe_ggtt_dump_node(ggtt, &node->base, "balloon");
- return 0;
-}
-
/**
- * xe_ggtt_node_remove_balloon_locked - release a reserved GGTT region
- * @node: the &xe_ggtt_node with reserved GGTT region
- *
- * To be used in cases where ggtt->lock is already taken.
- * See xe_ggtt_node_insert_balloon_locked() for details.
- */
-void xe_ggtt_node_remove_balloon_locked(struct xe_ggtt_node *node)
-{
- if (!xe_ggtt_node_allocated(node))
- return;
-
- lockdep_assert_held(&node->ggtt->lock);
-
- xe_ggtt_dump_node(node->ggtt, &node->base, "remove-balloon");
-
- drm_mm_remove_node(&node->base);
-}
-
-static void xe_ggtt_assert_fit(struct xe_ggtt *ggtt, u64 start, u64 size)
-{
- struct xe_tile *tile = ggtt->tile;
-
- xe_tile_assert(tile, start >= ggtt->start);
- xe_tile_assert(tile, start + size <= ggtt->start + ggtt->size);
-}
-
-/**
- * xe_ggtt_shift_nodes_locked - Shift GGTT nodes to adjust for a change in usable address range.
+ * xe_ggtt_shift_nodes() - Shift GGTT nodes to adjust for a change in usable address range.
* @ggtt: the &xe_ggtt struct instance
- * @shift: change to the location of area provisioned for current VF
+ * @new_start: new location of area provisioned for current VF
+ *
+ * Ensure that all struct &xe_ggtt_node are moved to the @new_start base address
+ * by changing the base offset of the GGTT.
*
- * This function moves all nodes from the GGTT VM, to a temp list. These nodes are expected
- * to represent allocations in range formerly assigned to current VF, before the range changed.
- * When the GGTT VM is completely clear of any nodes, they are re-added with shifted offsets.
+ * This function may be called multiple times during recovery, but if
+ * @new_start is unchanged from the current base, it's a noop.
*
- * The function has no ability of failing - because it shifts existing nodes, without
- * any additional processing. If the nodes were successfully existing at the old address,
- * they will do the same at the new one. A fail inside this function would indicate that
- * the list of nodes was either already damaged, or that the shift brings the address range
- * outside of valid bounds. Both cases justify an assert rather than error code.
+ * @new_start should be a value between xe_wopcm_size() and #GUC_GGTT_TOP.
*/
-void xe_ggtt_shift_nodes_locked(struct xe_ggtt *ggtt, s64 shift)
+void xe_ggtt_shift_nodes(struct xe_ggtt *ggtt, u64 new_start)
{
- struct xe_tile *tile __maybe_unused = ggtt->tile;
- struct drm_mm_node *node, *tmpn;
- LIST_HEAD(temp_list_head);
-
- lockdep_assert_held(&ggtt->lock);
+ guard(mutex)(&ggtt->lock);
- if (IS_ENABLED(CONFIG_DRM_XE_DEBUG))
- drm_mm_for_each_node_safe(node, tmpn, &ggtt->mm)
- xe_ggtt_assert_fit(ggtt, node->start + shift, node->size);
+ xe_tile_assert(ggtt->tile, new_start >= xe_wopcm_size(tile_to_xe(ggtt->tile)));
+ xe_tile_assert(ggtt->tile, new_start + ggtt->size <= GUC_GGTT_TOP);
- drm_mm_for_each_node_safe(node, tmpn, &ggtt->mm) {
- drm_mm_remove_node(node);
- list_add(&node->node_list, &temp_list_head);
- }
-
- list_for_each_entry_safe(node, tmpn, &temp_list_head, node_list) {
- list_del(&node->node_list);
- node->start += shift;
- drm_mm_reserve_node(&ggtt->mm, node);
- xe_tile_assert(tile, drm_mm_node_allocated(node));
- }
+ WRITE_ONCE(ggtt->start, new_start);
}
static int xe_ggtt_node_insert_locked(struct xe_ggtt_node *node,
@@ -692,12 +595,8 @@ int xe_ggtt_node_insert(struct xe_ggtt_node *node, u32 size, u32 align)
*
* This function will allocate the struct %xe_ggtt_node and return its pointer.
* This struct will then be freed after the node removal upon xe_ggtt_node_remove()
- * or xe_ggtt_node_remove_balloon_locked().
- *
- * Having %xe_ggtt_node struct allocated doesn't mean that the node is already
- * allocated in GGTT. Only xe_ggtt_node_insert(), allocation through
- * xe_ggtt_node_insert_transform(), or xe_ggtt_node_insert_balloon_locked() will ensure the node is inserted or reserved
- * in GGTT.
+ * Having %xe_ggtt_node struct allocated doesn't mean that the node is already allocated
+ * in GGTT. Only xe_ggtt_node_insert() will ensure the node is inserted or reserved in GGTT.
*
* Return: A pointer to %xe_ggtt_node struct on success. An ERR_PTR otherwise.
**/
@@ -718,9 +617,9 @@ struct xe_ggtt_node *xe_ggtt_node_init(struct xe_ggtt *ggtt)
* xe_ggtt_node_fini - Forcebly finalize %xe_ggtt_node struct
* @node: the &xe_ggtt_node to be freed
*
- * If anything went wrong with either xe_ggtt_node_insert(), xe_ggtt_node_insert_locked(),
- * or xe_ggtt_node_insert_balloon_locked(); and this @node is not going to be reused, then,
- * this function needs to be called to free the %xe_ggtt_node struct
+ * If anything went wrong with either xe_ggtt_node_insert() and this @node is
+ * not going to be reused, then this function needs to be called to free the
+ * %xe_ggtt_node struct
**/
void xe_ggtt_node_fini(struct xe_ggtt_node *node)
{
@@ -1220,7 +1119,8 @@ u64 xe_ggtt_read_pte(struct xe_ggtt *ggtt, u64 offset)
*/
u64 xe_ggtt_node_addr(const struct xe_ggtt_node *node)
{
- return node->base.start + node->ggtt->start;
+ /* pairs with WRITE_ONCE in xe_ggtt_shift_nodes() */
+ return node->base.start + READ_ONCE(node->ggtt->start);
}
/**
diff --git a/drivers/gpu/drm/xe/xe_ggtt.h b/drivers/gpu/drm/xe/xe_ggtt.h
index 70d5e07ac4b66..49ea8e7ecc105 100644
--- a/drivers/gpu/drm/xe/xe_ggtt.h
+++ b/drivers/gpu/drm/xe/xe_ggtt.h
@@ -19,10 +19,7 @@ int xe_ggtt_init(struct xe_ggtt *ggtt);
struct xe_ggtt_node *xe_ggtt_node_init(struct xe_ggtt *ggtt);
void xe_ggtt_node_fini(struct xe_ggtt_node *node);
-int xe_ggtt_node_insert_balloon_locked(struct xe_ggtt_node *node,
- u64 start, u64 size);
-void xe_ggtt_node_remove_balloon_locked(struct xe_ggtt_node *node);
-void xe_ggtt_shift_nodes_locked(struct xe_ggtt *ggtt, s64 shift);
+void xe_ggtt_shift_nodes(struct xe_ggtt *ggtt, u64 new_base);
u64 xe_ggtt_start(struct xe_ggtt *ggtt);
u64 xe_ggtt_size(struct xe_ggtt *ggtt);
diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_vf.c b/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
index 30e8c2cf5f09a..fabefb0469d0c 100644
--- a/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
+++ b/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
@@ -488,7 +488,6 @@ u32 xe_gt_sriov_vf_gmdid(struct xe_gt *gt)
static int vf_get_ggtt_info(struct xe_gt *gt)
{
struct xe_tile *tile = gt_to_tile(gt);
- struct xe_ggtt *ggtt = tile->mem.ggtt;
struct xe_guc *guc = >->uc.guc;
u64 start, size, ggtt_size;
s64 shift;
@@ -496,8 +495,6 @@ static int vf_get_ggtt_info(struct xe_gt *gt)
xe_gt_assert(gt, IS_SRIOV_VF(gt_to_xe(gt)));
- guard(mutex)(&ggtt->lock);
-
err = guc_action_query_single_klv64(guc, GUC_KLV_VF_CFG_GGTT_START_KEY, &start);
if (unlikely(err))
return err;
@@ -510,7 +507,20 @@ static int vf_get_ggtt_info(struct xe_gt *gt)
return -ENODATA;
ggtt_size = xe_tile_sriov_vf_ggtt(tile);
- if (ggtt_size && ggtt_size != size) {
+ if (!ggtt_size) {
+ /*
+ * This function is called once during xe_guc_init_noalloc(),
+ * at which point ggtt_size = 0 and we have to initialize everything,
+ * and GGTT is not yet initialized.
+ *
+ * Return early as there's nothing to fixup.'
+ */
+ xe_tile_sriov_vf_ggtt_store(tile, size);
+ xe_tile_sriov_vf_ggtt_base_store(tile, start);
+ return 0;
+ }
+
+ if (ggtt_size != size) {
xe_gt_sriov_err(gt, "Unexpected GGTT reassignment: %lluK != %lluK\n",
size / SZ_1K, ggtt_size / SZ_1K);
return -EREMCHG;
@@ -521,13 +531,20 @@ static int vf_get_ggtt_info(struct xe_gt *gt)
shift = start - (s64)xe_tile_sriov_vf_ggtt_base(tile);
xe_tile_sriov_vf_ggtt_base_store(tile, start);
- xe_tile_sriov_vf_ggtt_store(tile, size);
- if (shift && shift != start) {
- xe_gt_sriov_info(gt, "Shifting GGTT base by %lld to 0x%016llx\n",
- shift, start);
- xe_tile_sriov_vf_fixup_ggtt_nodes_locked(gt_to_tile(gt), shift);
- }
+ /*
+ * This function can be called repeatedly from post migration fixups,
+ * at which point we inform the GGTT of the new base address.
+ * xe_ggtt_shift_nodes() may be called multiple times for each migration,
+ * but will be a noop if the base is unchanged.
+ *
+ * Since we're not holding a lock, the shift value may be
+ * calculated incorrectly.
+ * This is only used for a debug print so it's harmless.
+ */
+ xe_gt_sriov_info(gt, "Shifting GGTT base by %lld to 0x%016llx\n",
+ shift, start);
+ xe_ggtt_shift_nodes(tile->mem.ggtt, start);
if (xe_sriov_vf_migration_supported(gt_to_xe(gt))) {
WRITE_ONCE(gt->sriov.vf.migration.ggtt_need_fixes, false);
diff --git a/drivers/gpu/drm/xe/xe_tile_sriov_vf.c b/drivers/gpu/drm/xe/xe_tile_sriov_vf.c
index c9bac2cfdd044..24293521e0904 100644
--- a/drivers/gpu/drm/xe/xe_tile_sriov_vf.c
+++ b/drivers/gpu/drm/xe/xe_tile_sriov_vf.c
@@ -14,173 +14,12 @@
#include "xe_tile_sriov_vf.h"
#include "xe_wopcm.h"
-static int vf_init_ggtt_balloons(struct xe_tile *tile)
-{
- struct xe_ggtt *ggtt = tile->mem.ggtt;
-
- xe_tile_assert(tile, IS_SRIOV_VF(tile_to_xe(tile)));
-
- tile->sriov.vf.ggtt_balloon[0] = xe_ggtt_node_init(ggtt);
- if (IS_ERR(tile->sriov.vf.ggtt_balloon[0]))
- return PTR_ERR(tile->sriov.vf.ggtt_balloon[0]);
-
- tile->sriov.vf.ggtt_balloon[1] = xe_ggtt_node_init(ggtt);
- if (IS_ERR(tile->sriov.vf.ggtt_balloon[1])) {
- xe_ggtt_node_fini(tile->sriov.vf.ggtt_balloon[0]);
- return PTR_ERR(tile->sriov.vf.ggtt_balloon[1]);
- }
-
- return 0;
-}
-
-/**
- * xe_tile_sriov_vf_balloon_ggtt_locked - Insert balloon nodes to limit used GGTT address range.
- * @tile: the &xe_tile struct instance
- *
- * Return: 0 on success or a negative error code on failure.
- */
-static int xe_tile_sriov_vf_balloon_ggtt_locked(struct xe_tile *tile)
-{
- u64 ggtt_base = tile->sriov.vf.self_config.ggtt_base;
- u64 ggtt_size = tile->sriov.vf.self_config.ggtt_size;
- struct xe_device *xe = tile_to_xe(tile);
- u64 wopcm = xe_wopcm_size(xe);
- u64 start, end;
- int err;
-
- xe_tile_assert(tile, IS_SRIOV_VF(xe));
- xe_tile_assert(tile, ggtt_size);
- lockdep_assert_held(&tile->mem.ggtt->lock);
-
- /*
- * VF can only use part of the GGTT as allocated by the PF:
- *
- * WOPCM GUC_GGTT_TOP
- * |<------------ Total GGTT size ------------------>|
- *
- * VF GGTT base -->|<- size ->|
- *
- * +--------------------+----------+-----------------+
- * |////////////////////| block |\\\\\\\\\\\\\\\\\|
- * +--------------------+----------+-----------------+
- *
- * |<--- balloon[0] --->|<-- VF -->|<-- balloon[1] ->|
- */
-
- if (ggtt_base < wopcm || ggtt_base > GUC_GGTT_TOP ||
- ggtt_size > GUC_GGTT_TOP - ggtt_base) {
- xe_sriov_err(xe, "tile%u: Invalid GGTT configuration: %#llx-%#llx\n",
- tile->id, ggtt_base, ggtt_base + ggtt_size - 1);
- return -ERANGE;
- }
-
- start = wopcm;
- end = ggtt_base;
- if (end != start) {
- err = xe_ggtt_node_insert_balloon_locked(tile->sriov.vf.ggtt_balloon[0],
- start, end);
- if (err)
- return err;
- }
-
- start = ggtt_base + ggtt_size;
- end = GUC_GGTT_TOP;
- if (end != start) {
- err = xe_ggtt_node_insert_balloon_locked(tile->sriov.vf.ggtt_balloon[1],
- start, end);
- if (err) {
- xe_ggtt_node_remove_balloon_locked(tile->sriov.vf.ggtt_balloon[0]);
- return err;
- }
- }
-
- return 0;
-}
-
-static int vf_balloon_ggtt(struct xe_tile *tile)
-{
- struct xe_ggtt *ggtt = tile->mem.ggtt;
- int err;
-
- mutex_lock(&ggtt->lock);
- err = xe_tile_sriov_vf_balloon_ggtt_locked(tile);
- mutex_unlock(&ggtt->lock);
-
- return err;
-}
-
-/**
- * xe_tile_sriov_vf_deballoon_ggtt_locked - Remove balloon nodes.
- * @tile: the &xe_tile struct instance
- */
-void xe_tile_sriov_vf_deballoon_ggtt_locked(struct xe_tile *tile)
-{
- xe_tile_assert(tile, IS_SRIOV_VF(tile_to_xe(tile)));
-
- xe_ggtt_node_remove_balloon_locked(tile->sriov.vf.ggtt_balloon[1]);
- xe_ggtt_node_remove_balloon_locked(tile->sriov.vf.ggtt_balloon[0]);
-}
-
-static void vf_deballoon_ggtt(struct xe_tile *tile)
-{
- mutex_lock(&tile->mem.ggtt->lock);
- xe_tile_sriov_vf_deballoon_ggtt_locked(tile);
- mutex_unlock(&tile->mem.ggtt->lock);
-}
-
-static void vf_fini_ggtt_balloons(struct xe_tile *tile)
-{
- xe_tile_assert(tile, IS_SRIOV_VF(tile_to_xe(tile)));
-
- xe_ggtt_node_fini(tile->sriov.vf.ggtt_balloon[1]);
- xe_ggtt_node_fini(tile->sriov.vf.ggtt_balloon[0]);
-}
-
-static void cleanup_ggtt(struct drm_device *drm, void *arg)
-{
- struct xe_tile *tile = arg;
-
- vf_deballoon_ggtt(tile);
- vf_fini_ggtt_balloons(tile);
-}
-
-/**
- * xe_tile_sriov_vf_prepare_ggtt - Prepare a VF's GGTT configuration.
- * @tile: the &xe_tile
- *
- * This function is for VF use only.
- *
- * Return: 0 on success or a negative error code on failure.
- */
-int xe_tile_sriov_vf_prepare_ggtt(struct xe_tile *tile)
-{
- struct xe_device *xe = tile_to_xe(tile);
- int err;
-
- err = vf_init_ggtt_balloons(tile);
- if (err)
- return err;
-
- err = vf_balloon_ggtt(tile);
- if (err) {
- vf_fini_ggtt_balloons(tile);
- return err;
- }
-
- return drmm_add_action_or_reset(&xe->drm, cleanup_ggtt, tile);
-}
-
/**
* DOC: GGTT nodes shifting during VF post-migration recovery
*
* The first fixup applied to the VF KMD structures as part of post-migration
* recovery is shifting nodes within &xe_ggtt instance. The nodes are moved
* from range previously assigned to this VF, into newly provisioned area.
- * The changes include balloons, which are resized accordingly.
- *
- * The balloon nodes are there to eliminate unavailable ranges from use: one
- * reserves the GGTT area below the range for current VF, and another one
- * reserves area above.
*
* Below is a GGTT layout of example VF, with a certain address range assigned to
* said VF, and inaccessible areas above and below:
@@ -198,10 +37,6 @@ int xe_tile_sriov_vf_prepare_ggtt(struct xe_tile *tile)
*
* |<------- inaccessible for VF ------->|<VF owned>|<-- inaccessible for VF ->|
*
- * GGTT nodes used for tracking allocations:
- *
- * |<---------- balloon ------------>|<- nodes->|<----- balloon ------>|
- *
* After the migration, GGTT area assigned to the VF might have shifted, either
* to lower or to higher address. But we expect the total size and extra areas to
* be identical, as migration can only happen between matching platforms.
@@ -219,37 +54,12 @@ int xe_tile_sriov_vf_prepare_ggtt(struct xe_tile *tile)
* So the VF has a new slice of GGTT assigned, and during migration process, the
* memory content was copied to that new area. But the &xe_ggtt nodes are still
* tracking allocations using the old addresses. The nodes within VF owned area
- * have to be shifted, and balloon nodes need to be resized to properly mask out
- * areas not owned by the VF.
- *
- * Fixed &xe_ggtt nodes used for tracking allocations:
- *
- * |<------ balloon ------>|<- nodes->|<----------- balloon ----------->|
+ * have to be shifted, and the start offset for GGTT adjusted.
*
- * Due to use of GPU profiles, we do not expect the old and new GGTT ares to
+ * Due to use of GPU profiles, we do not expect the old and new GGTT areas to
* overlap; but our node shifting will fix addresses properly regardless.
*/
-/**
- * xe_tile_sriov_vf_fixup_ggtt_nodes_locked - Shift GGTT allocations to match assigned range.
- * @tile: the &xe_tile struct instance
- * @shift: the shift value
- *
- * Since Global GTT is not virtualized, each VF has an assigned range
- * within the global space. This range might have changed during migration,
- * which requires all memory addresses pointing to GGTT to be shifted.
- */
-void xe_tile_sriov_vf_fixup_ggtt_nodes_locked(struct xe_tile *tile, s64 shift)
-{
- struct xe_ggtt *ggtt = tile->mem.ggtt;
-
- lockdep_assert_held(&ggtt->lock);
-
- xe_tile_sriov_vf_deballoon_ggtt_locked(tile);
- xe_ggtt_shift_nodes_locked(ggtt, shift);
- xe_tile_sriov_vf_balloon_ggtt_locked(tile);
-}
-
/**
* xe_tile_sriov_vf_lmem - VF LMEM configuration.
* @tile: the &xe_tile
@@ -330,7 +140,7 @@ u64 xe_tile_sriov_vf_ggtt_base(struct xe_tile *tile)
xe_tile_assert(tile, IS_SRIOV_VF(tile_to_xe(tile)));
- return config->ggtt_base;
+ return READ_ONCE(config->ggtt_base);
}
/**
@@ -346,5 +156,5 @@ void xe_tile_sriov_vf_ggtt_base_store(struct xe_tile *tile, u64 ggtt_base)
xe_tile_assert(tile, IS_SRIOV_VF(tile_to_xe(tile)));
- config->ggtt_base = ggtt_base;
+ WRITE_ONCE(config->ggtt_base, ggtt_base);
}
diff --git a/drivers/gpu/drm/xe/xe_tile_sriov_vf.h b/drivers/gpu/drm/xe/xe_tile_sriov_vf.h
index 749f41504883c..f2bbc4fc57347 100644
--- a/drivers/gpu/drm/xe/xe_tile_sriov_vf.h
+++ b/drivers/gpu/drm/xe/xe_tile_sriov_vf.h
@@ -10,9 +10,6 @@
struct xe_tile;
-int xe_tile_sriov_vf_prepare_ggtt(struct xe_tile *tile);
-void xe_tile_sriov_vf_deballoon_ggtt_locked(struct xe_tile *tile);
-void xe_tile_sriov_vf_fixup_ggtt_nodes_locked(struct xe_tile *tile, s64 shift);
u64 xe_tile_sriov_vf_ggtt(struct xe_tile *tile);
void xe_tile_sriov_vf_ggtt_store(struct xe_tile *tile, u64 ggtt_size);
u64 xe_tile_sriov_vf_ggtt_base(struct xe_tile *tile);
--
2.51.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v6 3/5] drm/xe: Move struct xe_ggtt to xe_ggtt.c
2026-01-26 10:45 [PATCH v6 0/5] drm/xe: Privatize struct xe_ggtt Maarten Lankhorst
2026-01-26 10:46 ` [PATCH v6 1/5] drm/xe: Make xe_ggtt_node offset relative to starting offset Maarten Lankhorst
2026-01-26 10:46 ` [PATCH v6 2/5] drm/xe: Rewrite GGTT VF initialization Maarten Lankhorst
@ 2026-01-26 10:46 ` Maarten Lankhorst
2026-01-26 21:06 ` Michal Wajdeczko
2026-01-26 10:46 ` [PATCH v6 4/5] drm/xe: Make xe_ggtt_node_insert return a node Maarten Lankhorst
` (5 subsequent siblings)
8 siblings, 1 reply; 15+ messages in thread
From: Maarten Lankhorst @ 2026-01-26 10:46 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Maarten Lankhorst, Matthew Brost, Maarten Lankhorst
From: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
No users left outside of xe_ggtt.c, so we can make the struct private.
This prevents us from accidentally touching it before init.
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Reviewed-by: Matthew Brost <matthew.brost@intel.com>
Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
---
drivers/gpu/drm/xe/xe_ggtt.c | 55 +++++++++++++++++++++++++++
drivers/gpu/drm/xe/xe_ggtt.h | 1 +
drivers/gpu/drm/xe/xe_ggtt_types.h | 60 +-----------------------------
3 files changed, 58 insertions(+), 58 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_ggtt.c b/drivers/gpu/drm/xe/xe_ggtt.c
index fecbdd71cec5d..6c97ce9b0c10b 100644
--- a/drivers/gpu/drm/xe/xe_ggtt.c
+++ b/drivers/gpu/drm/xe/xe_ggtt.c
@@ -84,6 +84,61 @@ struct xe_ggtt_node {
bool invalidate_on_remove;
};
+/**
+ * struct xe_ggtt_pt_ops - GGTT Page table operations
+ * Which can vary from platform to platform.
+ */
+struct xe_ggtt_pt_ops {
+ /** @pte_encode_flags: Encode PTE flags for a given BO */
+ u64 (*pte_encode_flags)(struct xe_bo *bo, u16 pat_index);
+
+ /** @ggtt_set_pte: Directly write into GGTT's PTE */
+ xe_ggtt_set_pte_fn ggtt_set_pte;
+
+ /** @ggtt_get_pte: Directly read from GGTT's PTE */
+ u64 (*ggtt_get_pte)(struct xe_ggtt *ggtt, u64 addr);
+};
+
+/**
+ * struct xe_ggtt - Main GGTT struct
+ *
+ * In general, each tile can contains its own Global Graphics Translation Table
+ * (GGTT) instance.
+ */
+struct xe_ggtt {
+ /** @tile: Back pointer to tile where this GGTT belongs */
+ struct xe_tile *tile;
+ /** @start: Start offset of GGTT */
+ u64 start;
+ /** @size: Total usable size of this GGTT */
+ u64 size;
+
+#define XE_GGTT_FLAGS_64K BIT(0)
+ /**
+ * @flags: Flags for this GGTT
+ * Acceptable flags:
+ * - %XE_GGTT_FLAGS_64K - if PTE size is 64K. Otherwise, regular is 4K.
+ */
+ unsigned int flags;
+ /** @scratch: Internal object allocation used as a scratch page */
+ struct xe_bo *scratch;
+ /** @lock: Mutex lock to protect GGTT data */
+ struct mutex lock;
+ /**
+ * @gsm: The iomem pointer to the actual location of the translation
+ * table located in the GSM for easy PTE manipulation
+ */
+ u64 __iomem *gsm;
+ /** @pt_ops: Page Table operations per platform */
+ const struct xe_ggtt_pt_ops *pt_ops;
+ /** @mm: The memory manager used to manage individual GGTT allocations */
+ struct drm_mm mm;
+ /** @access_count: counts GGTT writes */
+ unsigned int access_count;
+ /** @wq: Dedicated unordered work queue to process node removals */
+ struct workqueue_struct *wq;
+};
+
static u64 xelp_ggtt_pte_flags(struct xe_bo *bo, u16 pat_index)
{
u64 pte = XE_PAGE_PRESENT;
diff --git a/drivers/gpu/drm/xe/xe_ggtt.h b/drivers/gpu/drm/xe/xe_ggtt.h
index 49ea8e7ecc105..403eb5c0db49d 100644
--- a/drivers/gpu/drm/xe/xe_ggtt.h
+++ b/drivers/gpu/drm/xe/xe_ggtt.h
@@ -9,6 +9,7 @@
#include "xe_ggtt_types.h"
struct drm_printer;
+struct xe_bo;
struct xe_tile;
struct drm_exec;
diff --git a/drivers/gpu/drm/xe/xe_ggtt_types.h b/drivers/gpu/drm/xe/xe_ggtt_types.h
index d82b71a198bc2..cf754e4d502ad 100644
--- a/drivers/gpu/drm/xe/xe_ggtt_types.h
+++ b/drivers/gpu/drm/xe/xe_ggtt_types.h
@@ -6,72 +6,16 @@
#ifndef _XE_GGTT_TYPES_H_
#define _XE_GGTT_TYPES_H_
+#include <linux/types.h>
#include <drm/drm_mm.h>
-#include "xe_pt_types.h"
-
-struct xe_bo;
+struct xe_ggtt;
struct xe_ggtt_node;
-struct xe_gt;
-
-/**
- * struct xe_ggtt - Main GGTT struct
- *
- * In general, each tile can contains its own Global Graphics Translation Table
- * (GGTT) instance.
- */
-struct xe_ggtt {
- /** @tile: Back pointer to tile where this GGTT belongs */
- struct xe_tile *tile;
- /** @start: Start offset of GGTT */
- u64 start;
- /** @size: Total usable size of this GGTT */
- u64 size;
-
-#define XE_GGTT_FLAGS_64K BIT(0)
- /**
- * @flags: Flags for this GGTT
- * Acceptable flags:
- * - %XE_GGTT_FLAGS_64K - if PTE size is 64K. Otherwise, regular is 4K.
- */
- unsigned int flags;
- /** @scratch: Internal object allocation used as a scratch page */
- struct xe_bo *scratch;
- /** @lock: Mutex lock to protect GGTT data */
- struct mutex lock;
- /**
- * @gsm: The iomem pointer to the actual location of the translation
- * table located in the GSM for easy PTE manipulation
- */
- u64 __iomem *gsm;
- /** @pt_ops: Page Table operations per platform */
- const struct xe_ggtt_pt_ops *pt_ops;
- /** @mm: The memory manager used to manage individual GGTT allocations */
- struct drm_mm mm;
- /** @access_count: counts GGTT writes */
- unsigned int access_count;
- /** @wq: Dedicated unordered work queue to process node removals */
- struct workqueue_struct *wq;
-};
typedef void (*xe_ggtt_set_pte_fn)(struct xe_ggtt *ggtt, u64 addr, u64 pte);
typedef void (*xe_ggtt_transform_cb)(struct xe_ggtt *ggtt,
struct xe_ggtt_node *node,
u64 pte_flags,
xe_ggtt_set_pte_fn set_pte, void *arg);
-/**
- * struct xe_ggtt_pt_ops - GGTT Page table operations
- * Which can vary from platform to platform.
- */
-struct xe_ggtt_pt_ops {
- /** @pte_encode_flags: Encode PTE flags for a given BO */
- u64 (*pte_encode_flags)(struct xe_bo *bo, u16 pat_index);
-
- /** @ggtt_set_pte: Directly write into GGTT's PTE */
- xe_ggtt_set_pte_fn ggtt_set_pte;
-
- /** @ggtt_get_pte: Directly read from GGTT's PTE */
- u64 (*ggtt_get_pte)(struct xe_ggtt *ggtt, u64 addr);
-};
#endif
--
2.51.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v6 4/5] drm/xe: Make xe_ggtt_node_insert return a node
2026-01-26 10:45 [PATCH v6 0/5] drm/xe: Privatize struct xe_ggtt Maarten Lankhorst
` (2 preceding siblings ...)
2026-01-26 10:46 ` [PATCH v6 3/5] drm/xe: Move struct xe_ggtt to xe_ggtt.c Maarten Lankhorst
@ 2026-01-26 10:46 ` Maarten Lankhorst
2026-01-26 21:07 ` Michal Wajdeczko
2026-01-26 10:46 ` [PATCH v6 5/5] drm/xe: Remove xe_ggtt_node_allocated Maarten Lankhorst
` (4 subsequent siblings)
8 siblings, 1 reply; 15+ messages in thread
From: Maarten Lankhorst @ 2026-01-26 10:46 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Maarten Lankhorst, Matthew Brost
This extra step is easier to handle inside xe_ggtt.c and makes
xe_ggtt_node_allocated a simple null check instead, as the intermediate
state 'allocated but not inserted' is no longer used.
Privatize xe_ggtt_node_fini() and init() as they're no longer used
outside of xe_ggtt.c
Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
Reviewed-by: Matthew Brost <matthew.brost@intel.com> #v1
---
Changelog:
- rename xe_ggtt_node_insert(,_transform) to
xe_ggtt_insert_node(,_transform)
- remove xe prefix from ggtt_node_init/fini()
- Update xe_ggtt_node doc to point to the correct
allocation and removal functions
- Use guard in xe_ggtt_insert_node().
---
drivers/gpu/drm/xe/display/xe_fb_pin.c | 2 +-
drivers/gpu/drm/xe/tests/xe_guc_buf_kunit.c | 6 +-
drivers/gpu/drm/xe/xe_ggtt.c | 97 +++++++++------------
drivers/gpu/drm/xe/xe_ggtt.h | 7 +-
drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c | 24 +----
5 files changed, 48 insertions(+), 88 deletions(-)
diff --git a/drivers/gpu/drm/xe/display/xe_fb_pin.c b/drivers/gpu/drm/xe/display/xe_fb_pin.c
index d2c4e94180fa3..5ff583699325c 100644
--- a/drivers/gpu/drm/xe/display/xe_fb_pin.c
+++ b/drivers/gpu/drm/xe/display/xe_fb_pin.c
@@ -256,7 +256,7 @@ static int __xe_pin_fb_vma_ggtt(const struct intel_framebuffer *fb,
size = intel_rotation_info_size(&view->rotated) * XE_PAGE_SIZE;
pte = xe_ggtt_encode_pte_flags(ggtt, bo, xe->pat.idx[XE_CACHE_NONE]);
- vma->node = xe_ggtt_node_insert_transform(ggtt, bo, pte,
+ vma->node = xe_ggtt_insert_node_transform(ggtt, bo, pte,
ALIGN(size, align), align,
view->type == I915_GTT_VIEW_NORMAL ?
NULL : write_ggtt_rotated_node,
diff --git a/drivers/gpu/drm/xe/tests/xe_guc_buf_kunit.c b/drivers/gpu/drm/xe/tests/xe_guc_buf_kunit.c
index acddbedcf17cb..51e1e04001ace 100644
--- a/drivers/gpu/drm/xe/tests/xe_guc_buf_kunit.c
+++ b/drivers/gpu/drm/xe/tests/xe_guc_buf_kunit.c
@@ -38,12 +38,8 @@ static struct xe_bo *replacement_xe_managed_bo_create_pin_map(struct xe_device *
if (flags & XE_BO_FLAG_GGTT) {
struct xe_ggtt *ggtt = tile->mem.ggtt;
- bo->ggtt_node[tile->id] = xe_ggtt_node_init(ggtt);
+ bo->ggtt_node[tile->id] = xe_ggtt_insert_node(ggtt, xe_bo_size(bo), SZ_4K);
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, bo->ggtt_node[tile->id]);
-
- KUNIT_ASSERT_EQ(test, 0,
- xe_ggtt_node_insert(bo->ggtt_node[tile->id],
- xe_bo_size(bo), SZ_4K));
}
return bo;
diff --git a/drivers/gpu/drm/xe/xe_ggtt.c b/drivers/gpu/drm/xe/xe_ggtt.c
index 6c97ce9b0c10b..f3170cbbaeed8 100644
--- a/drivers/gpu/drm/xe/xe_ggtt.c
+++ b/drivers/gpu/drm/xe/xe_ggtt.c
@@ -69,9 +69,8 @@
/**
* struct xe_ggtt_node - A node in GGTT.
*
- * This struct needs to be initialized (only-once) with xe_ggtt_node_init() before any node
- * insertion or reservation.
- * It will, then, be finalized by xe_ggtt_node_remove().
+ * This struct is allocated with xe_ggtt_insert_node(,_transform) or xe_ggtt_insert_bo(,_at).
+ * It will be deallocated using xe_ggtt_node_remove().
*/
struct xe_ggtt_node {
/** @ggtt: Back pointer to xe_ggtt where this region will be inserted at */
@@ -458,6 +457,11 @@ static void xe_ggtt_initial_clear(struct xe_ggtt *ggtt)
mutex_unlock(&ggtt->lock);
}
+static void ggtt_node_fini(struct xe_ggtt_node *node)
+{
+ kfree(node);
+}
+
static void ggtt_node_remove(struct xe_ggtt_node *node)
{
struct xe_ggtt *ggtt = node->ggtt;
@@ -483,7 +487,7 @@ static void ggtt_node_remove(struct xe_ggtt_node *node)
drm_dev_exit(idx);
free_node:
- xe_ggtt_node_fini(node);
+ ggtt_node_fini(node);
}
static void ggtt_node_remove_work_func(struct work_struct *work)
@@ -612,50 +616,14 @@ void xe_ggtt_shift_nodes(struct xe_ggtt *ggtt, u64 new_start)
WRITE_ONCE(ggtt->start, new_start);
}
-static int xe_ggtt_node_insert_locked(struct xe_ggtt_node *node,
+static int xe_ggtt_insert_node_locked(struct xe_ggtt_node *node,
u32 size, u32 align, u32 mm_flags)
{
return drm_mm_insert_node_generic(&node->ggtt->mm, &node->base, size, align, 0,
mm_flags);
}
-/**
- * xe_ggtt_node_insert - Insert a &xe_ggtt_node into the GGTT
- * @node: the &xe_ggtt_node to be inserted
- * @size: size of the node
- * @align: alignment constrain of the node
- *
- * It cannot be called without first having called xe_ggtt_init() once.
- *
- * Return: 0 on success or a negative error code on failure.
- */
-int xe_ggtt_node_insert(struct xe_ggtt_node *node, u32 size, u32 align)
-{
- int ret;
-
- if (!node || !node->ggtt)
- return -ENOENT;
-
- mutex_lock(&node->ggtt->lock);
- ret = xe_ggtt_node_insert_locked(node, size, align,
- DRM_MM_INSERT_HIGH);
- mutex_unlock(&node->ggtt->lock);
-
- return ret;
-}
-
-/**
- * xe_ggtt_node_init - Initialize %xe_ggtt_node struct
- * @ggtt: the &xe_ggtt where the new node will later be inserted/reserved.
- *
- * This function will allocate the struct %xe_ggtt_node and return its pointer.
- * This struct will then be freed after the node removal upon xe_ggtt_node_remove()
- * Having %xe_ggtt_node struct allocated doesn't mean that the node is already allocated
- * in GGTT. Only xe_ggtt_node_insert() will ensure the node is inserted or reserved in GGTT.
- *
- * Return: A pointer to %xe_ggtt_node struct on success. An ERR_PTR otherwise.
- **/
-struct xe_ggtt_node *xe_ggtt_node_init(struct xe_ggtt *ggtt)
+static struct xe_ggtt_node *ggtt_node_init(struct xe_ggtt *ggtt)
{
struct xe_ggtt_node *node = kzalloc(sizeof(*node), GFP_NOFS);
@@ -669,16 +637,31 @@ struct xe_ggtt_node *xe_ggtt_node_init(struct xe_ggtt *ggtt)
}
/**
- * xe_ggtt_node_fini - Forcebly finalize %xe_ggtt_node struct
- * @node: the &xe_ggtt_node to be freed
+ * xe_ggtt_insert_node - Insert a &xe_ggtt_node into the GGTT
+ * @ggtt: the @ggtt into which the node should be inserted.
+ * @size: size of the node
+ * @align: alignment constrain of the node
*
- * If anything went wrong with either xe_ggtt_node_insert() and this @node is
- * not going to be reused, then this function needs to be called to free the
- * %xe_ggtt_node struct
- **/
-void xe_ggtt_node_fini(struct xe_ggtt_node *node)
+ * Return: &xe_ggtt_node on success or a ERR_PTR on failure.
+ */
+struct xe_ggtt_node *xe_ggtt_insert_node(struct xe_ggtt *ggtt, u32 size, u32 align)
{
- kfree(node);
+ struct xe_ggtt_node *node;
+ int ret;
+
+ node = ggtt_node_init(ggtt);
+ if (IS_ERR(node))
+ return node;
+
+ guard(mutex)(&ggtt->lock);
+ ret = xe_ggtt_insert_node_locked(node, size, align,
+ DRM_MM_INSERT_HIGH);
+ if (ret) {
+ ggtt_node_fini(node);
+ return ERR_PTR(ret);
+ }
+
+ return node;
}
/**
@@ -766,7 +749,7 @@ void xe_ggtt_map_bo_unlocked(struct xe_ggtt *ggtt, struct xe_bo *bo)
}
/**
- * xe_ggtt_node_insert_transform - Insert a newly allocated &xe_ggtt_node into the GGTT
+ * xe_ggtt_insert_node_transform - Insert a newly allocated &xe_ggtt_node into the GGTT
* @ggtt: the &xe_ggtt where the node will inserted/reserved.
* @bo: The bo to be transformed
* @pte_flags: The extra GGTT flags to add to mapping.
@@ -780,7 +763,7 @@ void xe_ggtt_map_bo_unlocked(struct xe_ggtt *ggtt, struct xe_bo *bo)
*
* Return: A pointer to %xe_ggtt_node struct on success. An ERR_PTR otherwise.
*/
-struct xe_ggtt_node *xe_ggtt_node_insert_transform(struct xe_ggtt *ggtt,
+struct xe_ggtt_node *xe_ggtt_insert_node_transform(struct xe_ggtt *ggtt,
struct xe_bo *bo, u64 pte_flags,
u64 size, u32 align,
xe_ggtt_transform_cb transform, void *arg)
@@ -788,7 +771,7 @@ struct xe_ggtt_node *xe_ggtt_node_insert_transform(struct xe_ggtt *ggtt,
struct xe_ggtt_node *node;
int ret;
- node = xe_ggtt_node_init(ggtt);
+ node = ggtt_node_init(ggtt);
if (IS_ERR(node))
return ERR_CAST(node);
@@ -797,7 +780,7 @@ struct xe_ggtt_node *xe_ggtt_node_insert_transform(struct xe_ggtt *ggtt,
goto err;
}
- ret = xe_ggtt_node_insert_locked(node, size, align, 0);
+ ret = xe_ggtt_insert_node_locked(node, size, align, 0);
if (ret)
goto err_unlock;
@@ -812,7 +795,7 @@ struct xe_ggtt_node *xe_ggtt_node_insert_transform(struct xe_ggtt *ggtt,
err_unlock:
mutex_unlock(&ggtt->lock);
err:
- xe_ggtt_node_fini(node);
+ ggtt_node_fini(node);
return ERR_PTR(ret);
}
@@ -838,7 +821,7 @@ static int __xe_ggtt_insert_bo_at(struct xe_ggtt *ggtt, struct xe_bo *bo,
xe_pm_runtime_get_noresume(tile_to_xe(ggtt->tile));
- bo->ggtt_node[tile_id] = xe_ggtt_node_init(ggtt);
+ bo->ggtt_node[tile_id] = ggtt_node_init(ggtt);
if (IS_ERR(bo->ggtt_node[tile_id])) {
err = PTR_ERR(bo->ggtt_node[tile_id]);
bo->ggtt_node[tile_id] = NULL;
@@ -857,7 +840,7 @@ static int __xe_ggtt_insert_bo_at(struct xe_ggtt *ggtt, struct xe_bo *bo,
err = drm_mm_insert_node_in_range(&ggtt->mm, &bo->ggtt_node[tile_id]->base,
xe_bo_size(bo), alignment, 0, start, end, 0);
if (err) {
- xe_ggtt_node_fini(bo->ggtt_node[tile_id]);
+ ggtt_node_fini(bo->ggtt_node[tile_id]);
bo->ggtt_node[tile_id] = NULL;
} else {
u16 cache_mode = bo->flags & XE_BO_FLAG_NEEDS_UC ? XE_CACHE_NONE : XE_CACHE_WB;
diff --git a/drivers/gpu/drm/xe/xe_ggtt.h b/drivers/gpu/drm/xe/xe_ggtt.h
index 403eb5c0db49d..9e6210c6f44ea 100644
--- a/drivers/gpu/drm/xe/xe_ggtt.h
+++ b/drivers/gpu/drm/xe/xe_ggtt.h
@@ -18,15 +18,14 @@ int xe_ggtt_init_early(struct xe_ggtt *ggtt);
int xe_ggtt_init_kunit(struct xe_ggtt *ggtt, u32 reserved, u32 size);
int xe_ggtt_init(struct xe_ggtt *ggtt);
-struct xe_ggtt_node *xe_ggtt_node_init(struct xe_ggtt *ggtt);
-void xe_ggtt_node_fini(struct xe_ggtt_node *node);
void xe_ggtt_shift_nodes(struct xe_ggtt *ggtt, u64 new_base);
u64 xe_ggtt_start(struct xe_ggtt *ggtt);
u64 xe_ggtt_size(struct xe_ggtt *ggtt);
-int xe_ggtt_node_insert(struct xe_ggtt_node *node, u32 size, u32 align);
struct xe_ggtt_node *
-xe_ggtt_node_insert_transform(struct xe_ggtt *ggtt,
+xe_ggtt_insert_node(struct xe_ggtt *ggtt, u32 size, u32 align);
+struct xe_ggtt_node *
+xe_ggtt_insert_node_transform(struct xe_ggtt *ggtt,
struct xe_bo *bo, u64 pte,
u64 size, u32 align,
xe_ggtt_transform_cb transform, void *arg);
diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
index 23601ce79348a..3fe664cd3b88c 100644
--- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
+++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
@@ -482,23 +482,9 @@ static int pf_distribute_config_ggtt(struct xe_tile *tile, unsigned int vfid, u6
return err ?: err2;
}
-static void pf_release_ggtt(struct xe_tile *tile, struct xe_ggtt_node *node)
-{
- if (xe_ggtt_node_allocated(node)) {
- /*
- * explicit GGTT PTE assignment to the PF using xe_ggtt_assign()
- * is redundant, as PTE will be implicitly re-assigned to PF by
- * the xe_ggtt_clear() called by below xe_ggtt_remove_node().
- */
- xe_ggtt_node_remove(node, false);
- } else {
- xe_ggtt_node_fini(node);
- }
-}
-
static void pf_release_vf_config_ggtt(struct xe_gt *gt, struct xe_gt_sriov_config *config)
{
- pf_release_ggtt(gt_to_tile(gt), config->ggtt_region);
+ xe_ggtt_node_remove(config->ggtt_region, false);
config->ggtt_region = NULL;
}
@@ -533,14 +519,10 @@ static int pf_provision_vf_ggtt(struct xe_gt *gt, unsigned int vfid, u64 size)
if (!size)
return 0;
- node = xe_ggtt_node_init(ggtt);
+ node = xe_ggtt_insert_node(ggtt, size, alignment);
if (IS_ERR(node))
return PTR_ERR(node);
- err = xe_ggtt_node_insert(node, size, alignment);
- if (unlikely(err))
- goto err;
-
xe_ggtt_assign(node, vfid);
xe_gt_sriov_dbg_verbose(gt, "VF%u assigned GGTT %llx-%llx\n",
vfid, xe_ggtt_node_addr(node), xe_ggtt_node_addr(node) + size - 1);
@@ -552,7 +534,7 @@ static int pf_provision_vf_ggtt(struct xe_gt *gt, unsigned int vfid, u64 size)
config->ggtt_region = node;
return 0;
err:
- pf_release_ggtt(tile, node);
+ xe_ggtt_node_remove(node, false);
return err;
}
--
2.51.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v6 5/5] drm/xe: Remove xe_ggtt_node_allocated
2026-01-26 10:45 [PATCH v6 0/5] drm/xe: Privatize struct xe_ggtt Maarten Lankhorst
` (3 preceding siblings ...)
2026-01-26 10:46 ` [PATCH v6 4/5] drm/xe: Make xe_ggtt_node_insert return a node Maarten Lankhorst
@ 2026-01-26 10:46 ` Maarten Lankhorst
2026-01-26 21:13 ` Michal Wajdeczko
2026-01-26 10:52 ` ✗ CI.checkpatch: warning for drm/xe: Privatize struct xe_ggtt. (rev4) Patchwork
` (3 subsequent siblings)
8 siblings, 1 reply; 15+ messages in thread
From: Maarten Lankhorst @ 2026-01-26 10:46 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Maarten Lankhorst
With the intermediate state gone, no longer useful. Just check against
NULL where needed.
Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
---
drivers/gpu/drm/xe/display/xe_fb_pin.c | 3 +--
drivers/gpu/drm/xe/xe_ggtt.c | 17 -----------------
drivers/gpu/drm/xe/xe_ggtt.h | 1 -
drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c | 12 ++++++------
4 files changed, 7 insertions(+), 26 deletions(-)
diff --git a/drivers/gpu/drm/xe/display/xe_fb_pin.c b/drivers/gpu/drm/xe/display/xe_fb_pin.c
index 5ff583699325c..e1d29b6ba043e 100644
--- a/drivers/gpu/drm/xe/display/xe_fb_pin.c
+++ b/drivers/gpu/drm/xe/display/xe_fb_pin.c
@@ -352,8 +352,7 @@ static void __xe_unpin_fb_vma(struct i915_vma *vma)
if (vma->dpt)
xe_bo_unpin_map_no_vm(vma->dpt);
- else if (!xe_ggtt_node_allocated(vma->bo->ggtt_node[tile_id]) ||
- vma->bo->ggtt_node[tile_id] != vma->node)
+ else if (vma->bo->ggtt_node[tile_id] != vma->node)
xe_ggtt_node_remove(vma->node, false);
ttm_bo_reserve(&vma->bo->ttm, false, false, NULL);
diff --git a/drivers/gpu/drm/xe/xe_ggtt.c b/drivers/gpu/drm/xe/xe_ggtt.c
index f3170cbbaeed8..246a06221c33b 100644
--- a/drivers/gpu/drm/xe/xe_ggtt.c
+++ b/drivers/gpu/drm/xe/xe_ggtt.c
@@ -664,20 +664,6 @@ struct xe_ggtt_node *xe_ggtt_insert_node(struct xe_ggtt *ggtt, u32 size, u32 ali
return node;
}
-/**
- * xe_ggtt_node_allocated - Check if node is allocated in GGTT
- * @node: the &xe_ggtt_node to be inspected
- *
- * Return: True if allocated, False otherwise.
- */
-bool xe_ggtt_node_allocated(const struct xe_ggtt_node *node)
-{
- if (!node || !node->ggtt)
- return false;
-
- return drm_mm_node_allocated(&node->base);
-}
-
/**
* xe_ggtt_node_pt_size() - Get the size of page table entries needed to map a GGTT node.
* @node: the &xe_ggtt_node
@@ -958,9 +944,6 @@ static void xe_ggtt_assign_locked(const struct xe_ggtt_node *node, u16 vfid)
lockdep_assert_held(&ggtt->lock);
- if (!xe_ggtt_node_allocated(node))
- return;
-
while (start < end) {
ggtt->pt_ops->ggtt_set_pte(ggtt, start, pte);
start += XE_PAGE_SIZE;
diff --git a/drivers/gpu/drm/xe/xe_ggtt.h b/drivers/gpu/drm/xe/xe_ggtt.h
index 9e6210c6f44ea..c864cc975a695 100644
--- a/drivers/gpu/drm/xe/xe_ggtt.h
+++ b/drivers/gpu/drm/xe/xe_ggtt.h
@@ -30,7 +30,6 @@ xe_ggtt_insert_node_transform(struct xe_ggtt *ggtt,
u64 size, u32 align,
xe_ggtt_transform_cb transform, void *arg);
void xe_ggtt_node_remove(struct xe_ggtt_node *node, bool invalidate);
-bool xe_ggtt_node_allocated(const struct xe_ggtt_node *node);
size_t xe_ggtt_node_pt_size(const struct xe_ggtt_node *node);
void xe_ggtt_map_bo_unlocked(struct xe_ggtt *ggtt, struct xe_bo *bo);
int xe_ggtt_insert_bo(struct xe_ggtt *ggtt, struct xe_bo *bo, struct drm_exec *exec);
diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
index 3fe664cd3b88c..888193e1d2c50 100644
--- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
+++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c
@@ -279,7 +279,7 @@ static u32 encode_config_ggtt(u32 *cfg, const struct xe_gt_sriov_config *config,
{
struct xe_ggtt_node *node = config->ggtt_region;
- if (!xe_ggtt_node_allocated(node))
+ if (!node)
return 0;
return encode_ggtt(cfg, xe_ggtt_node_addr(node), xe_ggtt_node_size(node), details);
@@ -503,7 +503,7 @@ static int pf_provision_vf_ggtt(struct xe_gt *gt, unsigned int vfid, u64 size)
size = round_up(size, alignment);
- if (xe_ggtt_node_allocated(config->ggtt_region)) {
+ if (config->ggtt_region) {
err = pf_distribute_config_ggtt(tile, vfid, 0, 0);
if (unlikely(err))
return err;
@@ -514,7 +514,7 @@ static int pf_provision_vf_ggtt(struct xe_gt *gt, unsigned int vfid, u64 size)
if (unlikely(err))
return err;
}
- xe_gt_assert(gt, !xe_ggtt_node_allocated(config->ggtt_region));
+ xe_gt_assert(gt, !config->ggtt_region);
if (!size)
return 0;
@@ -544,7 +544,7 @@ static u64 pf_get_vf_config_ggtt(struct xe_gt *gt, unsigned int vfid)
struct xe_ggtt_node *node = config->ggtt_region;
xe_gt_assert(gt, xe_gt_is_main_type(gt));
- return xe_ggtt_node_allocated(node) ? xe_ggtt_node_size(node) : 0;
+ return node ? xe_ggtt_node_size(node) : 0;
}
/**
@@ -2558,7 +2558,7 @@ int xe_gt_sriov_pf_config_release(struct xe_gt *gt, unsigned int vfid, bool forc
static void pf_sanitize_ggtt(struct xe_ggtt_node *ggtt_region, unsigned int vfid)
{
- if (xe_ggtt_node_allocated(ggtt_region))
+ if (ggtt_region)
xe_ggtt_assign(ggtt_region, vfid);
}
@@ -3017,7 +3017,7 @@ int xe_gt_sriov_pf_config_print_ggtt(struct xe_gt *gt, struct drm_printer *p)
for (n = 1; n <= total_vfs; n++) {
config = >->sriov.pf.vfs[n].config;
- if (!xe_ggtt_node_allocated(config->ggtt_region))
+ if (!config->ggtt_region)
continue;
string_get_size(xe_ggtt_node_size(config->ggtt_region), 1, STRING_UNITS_2,
--
2.51.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* ✗ CI.checkpatch: warning for drm/xe: Privatize struct xe_ggtt. (rev4)
2026-01-26 10:45 [PATCH v6 0/5] drm/xe: Privatize struct xe_ggtt Maarten Lankhorst
` (4 preceding siblings ...)
2026-01-26 10:46 ` [PATCH v6 5/5] drm/xe: Remove xe_ggtt_node_allocated Maarten Lankhorst
@ 2026-01-26 10:52 ` Patchwork
2026-01-26 10:53 ` ✓ CI.KUnit: success " Patchwork
` (2 subsequent siblings)
8 siblings, 0 replies; 15+ messages in thread
From: Patchwork @ 2026-01-26 10:52 UTC (permalink / raw)
To: Maarten Lankhorst; +Cc: intel-xe
== Series Details ==
Series: drm/xe: Privatize struct xe_ggtt. (rev4)
URL : https://patchwork.freedesktop.org/series/160006/
State : warning
== Summary ==
+ KERNEL=/kernel
+ git clone https://gitlab.freedesktop.org/drm/maintainer-tools mt
Cloning into 'mt'...
warning: redirecting to https://gitlab.freedesktop.org/drm/maintainer-tools.git/
+ git -C mt rev-list -n1 origin/master
1f57ba1afceae32108bd24770069f764d940a0e4
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ git log -n1
commit e180aa19c443ba52f37255295c32cda7ea6723ee
Author: Maarten Lankhorst <dev@lankhorst.se>
Date: Mon Jan 26 11:46:04 2026 +0100
drm/xe: Remove xe_ggtt_node_allocated
With the intermediate state gone, no longer useful. Just check against
NULL where needed.
Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
+ /mt/dim checkpatch faba79e95e439dbfce95931729875fcdcc211172 drm-intel
18c99f0f1058 drm/xe: Make xe_ggtt_node offset relative to starting offset
-:63: WARNING:LONG_LINE: line length of 107 exceeds 100 columns
#63: FILE: drivers/gpu/drm/xe/xe_ggtt.c:583:
+ xe_ggtt_node_addr(node), xe_ggtt_node_addr(node) + node->base.size, ERR_PTR(err)))
total: 0 errors, 1 warnings, 0 checks, 141 lines checked
7ed0983b846e drm/xe: Rewrite GGTT VF initialization
-:18: WARNING:BAD_SIGN_OFF: Co-developed-by: must be immediately followed by Signed-off-by:
#18:
Co-developed-by: Matthew Brost <matthew.brost@intel.com>
total: 0 errors, 1 warnings, 0 checks, 540 lines checked
a8a18370c92a drm/xe: Move struct xe_ggtt to xe_ggtt.c
-:46: ERROR:CODE_INDENT: code indent should use tabs where possible
#46: FILE: drivers/gpu/drm/xe/xe_ggtt.c:111:
+ /** @start: Start offset of GGTT */$
total: 1 errors, 0 warnings, 0 checks, 142 lines checked
24c9d993bafa drm/xe: Make xe_ggtt_node_insert return a node
e180aa19c443 drm/xe: Remove xe_ggtt_node_allocated
^ permalink raw reply [flat|nested] 15+ messages in thread
* ✓ CI.KUnit: success for drm/xe: Privatize struct xe_ggtt. (rev4)
2026-01-26 10:45 [PATCH v6 0/5] drm/xe: Privatize struct xe_ggtt Maarten Lankhorst
` (5 preceding siblings ...)
2026-01-26 10:52 ` ✗ CI.checkpatch: warning for drm/xe: Privatize struct xe_ggtt. (rev4) Patchwork
@ 2026-01-26 10:53 ` Patchwork
2026-01-26 11:46 ` ✗ Xe.CI.BAT: failure " Patchwork
2026-01-26 13:34 ` ✗ Xe.CI.Full: " Patchwork
8 siblings, 0 replies; 15+ messages in thread
From: Patchwork @ 2026-01-26 10:53 UTC (permalink / raw)
To: Maarten Lankhorst; +Cc: intel-xe
== Series Details ==
Series: drm/xe: Privatize struct xe_ggtt. (rev4)
URL : https://patchwork.freedesktop.org/series/160006/
State : success
== Summary ==
+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[10:52:20] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[10:52:24] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[10:52:55] Starting KUnit Kernel (1/1)...
[10:52:55] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[10:52:56] ================== guc_buf (11 subtests) ===================
[10:52:56] [PASSED] test_smallest
[10:52:56] [PASSED] test_largest
[10:52:56] [PASSED] test_granular
[10:52:56] [PASSED] test_unique
[10:52:56] [PASSED] test_overlap
[10:52:56] [PASSED] test_reusable
[10:52:56] [PASSED] test_too_big
[10:52:56] [PASSED] test_flush
[10:52:56] [PASSED] test_lookup
[10:52:56] [PASSED] test_data
[10:52:56] [PASSED] test_class
[10:52:56] ===================== [PASSED] guc_buf =====================
[10:52:56] =================== guc_dbm (7 subtests) ===================
[10:52:56] [PASSED] test_empty
[10:52:56] [PASSED] test_default
[10:52:56] ======================== test_size ========================
[10:52:56] [PASSED] 4
[10:52:56] [PASSED] 8
[10:52:56] [PASSED] 32
[10:52:56] [PASSED] 256
[10:52:56] ==================== [PASSED] test_size ====================
[10:52:56] ======================= test_reuse ========================
[10:52:56] [PASSED] 4
[10:52:56] [PASSED] 8
[10:52:56] [PASSED] 32
[10:52:56] [PASSED] 256
[10:52:56] =================== [PASSED] test_reuse ====================
[10:52:56] =================== test_range_overlap ====================
[10:52:56] [PASSED] 4
[10:52:56] [PASSED] 8
[10:52:56] [PASSED] 32
[10:52:56] [PASSED] 256
[10:52:56] =============== [PASSED] test_range_overlap ================
[10:52:56] =================== test_range_compact ====================
[10:52:56] [PASSED] 4
[10:52:56] [PASSED] 8
[10:52:56] [PASSED] 32
[10:52:56] [PASSED] 256
[10:52:56] =============== [PASSED] test_range_compact ================
[10:52:56] ==================== test_range_spare =====================
[10:52:56] [PASSED] 4
[10:52:56] [PASSED] 8
[10:52:56] [PASSED] 32
[10:52:56] [PASSED] 256
[10:52:56] ================ [PASSED] test_range_spare =================
[10:52:56] ===================== [PASSED] guc_dbm =====================
[10:52:56] =================== guc_idm (6 subtests) ===================
[10:52:56] [PASSED] bad_init
[10:52:56] [PASSED] no_init
[10:52:56] [PASSED] init_fini
[10:52:56] [PASSED] check_used
[10:52:56] [PASSED] check_quota
[10:52:56] [PASSED] check_all
[10:52:56] ===================== [PASSED] guc_idm =====================
[10:52:56] ================== no_relay (3 subtests) ===================
[10:52:56] [PASSED] xe_drops_guc2pf_if_not_ready
[10:52:56] [PASSED] xe_drops_guc2vf_if_not_ready
[10:52:56] [PASSED] xe_rejects_send_if_not_ready
[10:52:56] ==================== [PASSED] no_relay =====================
[10:52:56] ================== pf_relay (14 subtests) ==================
[10:52:56] [PASSED] pf_rejects_guc2pf_too_short
[10:52:56] [PASSED] pf_rejects_guc2pf_too_long
[10:52:56] [PASSED] pf_rejects_guc2pf_no_payload
[10:52:56] [PASSED] pf_fails_no_payload
[10:52:56] [PASSED] pf_fails_bad_origin
[10:52:56] [PASSED] pf_fails_bad_type
[10:52:56] [PASSED] pf_txn_reports_error
[10:52:56] [PASSED] pf_txn_sends_pf2guc
[10:52:56] [PASSED] pf_sends_pf2guc
[10:52:56] [SKIPPED] pf_loopback_nop
[10:52:56] [SKIPPED] pf_loopback_echo
[10:52:56] [SKIPPED] pf_loopback_fail
[10:52:56] [SKIPPED] pf_loopback_busy
[10:52:56] [SKIPPED] pf_loopback_retry
[10:52:56] ==================== [PASSED] pf_relay =====================
[10:52:56] ================== vf_relay (3 subtests) ===================
[10:52:56] [PASSED] vf_rejects_guc2vf_too_short
[10:52:56] [PASSED] vf_rejects_guc2vf_too_long
[10:52:56] [PASSED] vf_rejects_guc2vf_no_payload
[10:52:56] ==================== [PASSED] vf_relay =====================
[10:52:56] ================ pf_gt_config (6 subtests) =================
[10:52:56] [PASSED] fair_contexts_1vf
[10:52:56] [PASSED] fair_doorbells_1vf
[10:52:56] [PASSED] fair_ggtt_1vf
[10:52:56] ====================== fair_contexts ======================
[10:52:56] [PASSED] 1 VF
[10:52:56] [PASSED] 2 VFs
[10:52:56] [PASSED] 3 VFs
[10:52:56] [PASSED] 4 VFs
[10:52:56] [PASSED] 5 VFs
[10:52:56] [PASSED] 6 VFs
[10:52:56] [PASSED] 7 VFs
[10:52:56] [PASSED] 8 VFs
[10:52:56] [PASSED] 9 VFs
[10:52:56] [PASSED] 10 VFs
[10:52:56] [PASSED] 11 VFs
[10:52:56] [PASSED] 12 VFs
[10:52:56] [PASSED] 13 VFs
[10:52:56] [PASSED] 14 VFs
[10:52:56] [PASSED] 15 VFs
[10:52:56] [PASSED] 16 VFs
[10:52:56] [PASSED] 17 VFs
[10:52:56] [PASSED] 18 VFs
[10:52:56] [PASSED] 19 VFs
[10:52:56] [PASSED] 20 VFs
[10:52:56] [PASSED] 21 VFs
[10:52:56] [PASSED] 22 VFs
[10:52:56] [PASSED] 23 VFs
[10:52:56] [PASSED] 24 VFs
[10:52:56] [PASSED] 25 VFs
[10:52:56] [PASSED] 26 VFs
[10:52:56] [PASSED] 27 VFs
[10:52:56] [PASSED] 28 VFs
[10:52:56] [PASSED] 29 VFs
[10:52:56] [PASSED] 30 VFs
[10:52:56] [PASSED] 31 VFs
[10:52:56] [PASSED] 32 VFs
[10:52:56] [PASSED] 33 VFs
[10:52:56] [PASSED] 34 VFs
[10:52:56] [PASSED] 35 VFs
[10:52:56] [PASSED] 36 VFs
[10:52:56] [PASSED] 37 VFs
[10:52:56] [PASSED] 38 VFs
[10:52:56] [PASSED] 39 VFs
[10:52:56] [PASSED] 40 VFs
[10:52:56] [PASSED] 41 VFs
[10:52:56] [PASSED] 42 VFs
[10:52:56] [PASSED] 43 VFs
[10:52:56] [PASSED] 44 VFs
[10:52:56] [PASSED] 45 VFs
[10:52:56] [PASSED] 46 VFs
[10:52:56] [PASSED] 47 VFs
[10:52:56] [PASSED] 48 VFs
[10:52:56] [PASSED] 49 VFs
[10:52:56] [PASSED] 50 VFs
[10:52:56] [PASSED] 51 VFs
[10:52:56] [PASSED] 52 VFs
[10:52:56] [PASSED] 53 VFs
[10:52:56] [PASSED] 54 VFs
[10:52:56] [PASSED] 55 VFs
[10:52:56] [PASSED] 56 VFs
[10:52:56] [PASSED] 57 VFs
[10:52:56] [PASSED] 58 VFs
[10:52:56] [PASSED] 59 VFs
[10:52:56] [PASSED] 60 VFs
[10:52:56] [PASSED] 61 VFs
[10:52:56] [PASSED] 62 VFs
[10:52:56] [PASSED] 63 VFs
[10:52:56] ================== [PASSED] fair_contexts ==================
[10:52:56] ===================== fair_doorbells ======================
[10:52:56] [PASSED] 1 VF
[10:52:56] [PASSED] 2 VFs
[10:52:56] [PASSED] 3 VFs
[10:52:56] [PASSED] 4 VFs
[10:52:56] [PASSED] 5 VFs
[10:52:56] [PASSED] 6 VFs
[10:52:56] [PASSED] 7 VFs
[10:52:56] [PASSED] 8 VFs
[10:52:56] [PASSED] 9 VFs
[10:52:56] [PASSED] 10 VFs
[10:52:56] [PASSED] 11 VFs
[10:52:56] [PASSED] 12 VFs
[10:52:56] [PASSED] 13 VFs
[10:52:56] [PASSED] 14 VFs
[10:52:56] [PASSED] 15 VFs
[10:52:56] [PASSED] 16 VFs
[10:52:56] [PASSED] 17 VFs
[10:52:56] [PASSED] 18 VFs
[10:52:56] [PASSED] 19 VFs
[10:52:56] [PASSED] 20 VFs
[10:52:56] [PASSED] 21 VFs
[10:52:56] [PASSED] 22 VFs
[10:52:56] [PASSED] 23 VFs
[10:52:56] [PASSED] 24 VFs
[10:52:56] [PASSED] 25 VFs
[10:52:56] [PASSED] 26 VFs
[10:52:56] [PASSED] 27 VFs
[10:52:56] [PASSED] 28 VFs
[10:52:56] [PASSED] 29 VFs
[10:52:56] [PASSED] 30 VFs
[10:52:56] [PASSED] 31 VFs
[10:52:56] [PASSED] 32 VFs
[10:52:56] [PASSED] 33 VFs
[10:52:56] [PASSED] 34 VFs
[10:52:56] [PASSED] 35 VFs
[10:52:56] [PASSED] 36 VFs
[10:52:56] [PASSED] 37 VFs
[10:52:56] [PASSED] 38 VFs
[10:52:56] [PASSED] 39 VFs
[10:52:56] [PASSED] 40 VFs
[10:52:56] [PASSED] 41 VFs
[10:52:56] [PASSED] 42 VFs
[10:52:56] [PASSED] 43 VFs
[10:52:56] [PASSED] 44 VFs
[10:52:56] [PASSED] 45 VFs
[10:52:56] [PASSED] 46 VFs
[10:52:56] [PASSED] 47 VFs
[10:52:56] [PASSED] 48 VFs
[10:52:56] [PASSED] 49 VFs
[10:52:56] [PASSED] 50 VFs
[10:52:56] [PASSED] 51 VFs
[10:52:56] [PASSED] 52 VFs
[10:52:56] [PASSED] 53 VFs
[10:52:56] [PASSED] 54 VFs
[10:52:56] [PASSED] 55 VFs
[10:52:56] [PASSED] 56 VFs
[10:52:56] [PASSED] 57 VFs
[10:52:56] [PASSED] 58 VFs
[10:52:56] [PASSED] 59 VFs
[10:52:56] [PASSED] 60 VFs
[10:52:56] [PASSED] 61 VFs
[10:52:56] [PASSED] 62 VFs
[10:52:56] [PASSED] 63 VFs
[10:52:56] ================= [PASSED] fair_doorbells ==================
[10:52:56] ======================== fair_ggtt ========================
[10:52:56] [PASSED] 1 VF
[10:52:56] [PASSED] 2 VFs
[10:52:56] [PASSED] 3 VFs
[10:52:56] [PASSED] 4 VFs
[10:52:56] [PASSED] 5 VFs
[10:52:56] [PASSED] 6 VFs
[10:52:56] [PASSED] 7 VFs
[10:52:56] [PASSED] 8 VFs
[10:52:56] [PASSED] 9 VFs
[10:52:56] [PASSED] 10 VFs
[10:52:56] [PASSED] 11 VFs
[10:52:56] [PASSED] 12 VFs
[10:52:56] [PASSED] 13 VFs
[10:52:56] [PASSED] 14 VFs
[10:52:56] [PASSED] 15 VFs
[10:52:56] [PASSED] 16 VFs
[10:52:56] [PASSED] 17 VFs
[10:52:56] [PASSED] 18 VFs
[10:52:56] [PASSED] 19 VFs
[10:52:56] [PASSED] 20 VFs
[10:52:56] [PASSED] 21 VFs
[10:52:56] [PASSED] 22 VFs
[10:52:56] [PASSED] 23 VFs
[10:52:56] [PASSED] 24 VFs
[10:52:56] [PASSED] 25 VFs
[10:52:56] [PASSED] 26 VFs
[10:52:56] [PASSED] 27 VFs
[10:52:56] [PASSED] 28 VFs
[10:52:56] [PASSED] 29 VFs
[10:52:56] [PASSED] 30 VFs
[10:52:56] [PASSED] 31 VFs
[10:52:56] [PASSED] 32 VFs
[10:52:56] [PASSED] 33 VFs
[10:52:56] [PASSED] 34 VFs
[10:52:56] [PASSED] 35 VFs
[10:52:56] [PASSED] 36 VFs
[10:52:56] [PASSED] 37 VFs
[10:52:56] [PASSED] 38 VFs
[10:52:56] [PASSED] 39 VFs
[10:52:56] [PASSED] 40 VFs
[10:52:56] [PASSED] 41 VFs
[10:52:56] [PASSED] 42 VFs
[10:52:56] [PASSED] 43 VFs
[10:52:56] [PASSED] 44 VFs
[10:52:56] [PASSED] 45 VFs
[10:52:56] [PASSED] 46 VFs
[10:52:56] [PASSED] 47 VFs
[10:52:56] [PASSED] 48 VFs
[10:52:56] [PASSED] 49 VFs
[10:52:56] [PASSED] 50 VFs
[10:52:56] [PASSED] 51 VFs
[10:52:56] [PASSED] 52 VFs
[10:52:56] [PASSED] 53 VFs
[10:52:56] [PASSED] 54 VFs
[10:52:56] [PASSED] 55 VFs
[10:52:56] [PASSED] 56 VFs
[10:52:56] [PASSED] 57 VFs
[10:52:56] [PASSED] 58 VFs
[10:52:56] [PASSED] 59 VFs
[10:52:56] [PASSED] 60 VFs
[10:52:56] [PASSED] 61 VFs
[10:52:56] [PASSED] 62 VFs
[10:52:56] [PASSED] 63 VFs
[10:52:56] ==================== [PASSED] fair_ggtt ====================
[10:52:56] ================== [PASSED] pf_gt_config ===================
[10:52:56] ===================== lmtt (1 subtest) =====================
[10:52:56] ======================== test_ops =========================
[10:52:56] [PASSED] 2-level
[10:52:56] [PASSED] multi-level
[10:52:56] ==================== [PASSED] test_ops =====================
[10:52:56] ====================== [PASSED] lmtt =======================
[10:52:56] ================= pf_service (11 subtests) =================
[10:52:56] [PASSED] pf_negotiate_any
[10:52:56] [PASSED] pf_negotiate_base_match
[10:52:56] [PASSED] pf_negotiate_base_newer
[10:52:56] [PASSED] pf_negotiate_base_next
[10:52:56] [SKIPPED] pf_negotiate_base_older
[10:52:56] [PASSED] pf_negotiate_base_prev
[10:52:56] [PASSED] pf_negotiate_latest_match
[10:52:56] [PASSED] pf_negotiate_latest_newer
[10:52:56] [PASSED] pf_negotiate_latest_next
[10:52:56] [SKIPPED] pf_negotiate_latest_older
[10:52:56] [SKIPPED] pf_negotiate_latest_prev
[10:52:56] =================== [PASSED] pf_service ====================
[10:52:56] ================= xe_guc_g2g (2 subtests) ==================
[10:52:56] ============== xe_live_guc_g2g_kunit_default ==============
[10:52:56] ========= [SKIPPED] xe_live_guc_g2g_kunit_default ==========
[10:52:56] ============== xe_live_guc_g2g_kunit_allmem ===============
[10:52:56] ========== [SKIPPED] xe_live_guc_g2g_kunit_allmem ==========
[10:52:56] =================== [SKIPPED] xe_guc_g2g ===================
[10:52:56] =================== xe_mocs (2 subtests) ===================
[10:52:56] ================ xe_live_mocs_kernel_kunit ================
[10:52:56] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[10:52:56] ================ xe_live_mocs_reset_kunit =================
[10:52:56] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[10:52:56] ==================== [SKIPPED] xe_mocs =====================
[10:52:56] ================= xe_migrate (2 subtests) ==================
[10:52:56] ================= xe_migrate_sanity_kunit =================
[10:52:56] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[10:52:56] ================== xe_validate_ccs_kunit ==================
[10:52:56] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[10:52:56] =================== [SKIPPED] xe_migrate ===================
[10:52:56] ================== xe_dma_buf (1 subtest) ==================
[10:52:56] ==================== xe_dma_buf_kunit =====================
[10:52:56] ================ [SKIPPED] xe_dma_buf_kunit ================
[10:52:56] =================== [SKIPPED] xe_dma_buf ===================
[10:52:56] ================= xe_bo_shrink (1 subtest) =================
[10:52:56] =================== xe_bo_shrink_kunit ====================
[10:52:56] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[10:52:56] ================== [SKIPPED] xe_bo_shrink ==================
[10:52:56] ==================== xe_bo (2 subtests) ====================
[10:52:56] ================== xe_ccs_migrate_kunit ===================
[10:52:56] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[10:52:56] ==================== xe_bo_evict_kunit ====================
[10:52:56] =============== [SKIPPED] xe_bo_evict_kunit ================
[10:52:56] ===================== [SKIPPED] xe_bo ======================
[10:52:56] ==================== args (13 subtests) ====================
[10:52:56] [PASSED] count_args_test
[10:52:56] [PASSED] call_args_example
[10:52:56] [PASSED] call_args_test
[10:52:56] [PASSED] drop_first_arg_example
[10:52:56] [PASSED] drop_first_arg_test
[10:52:56] [PASSED] first_arg_example
[10:52:56] [PASSED] first_arg_test
[10:52:56] [PASSED] last_arg_example
[10:52:56] [PASSED] last_arg_test
[10:52:56] [PASSED] pick_arg_example
[10:52:56] [PASSED] if_args_example
[10:52:56] [PASSED] if_args_test
[10:52:56] [PASSED] sep_comma_example
[10:52:56] ====================== [PASSED] args =======================
[10:52:56] =================== xe_pci (3 subtests) ====================
[10:52:56] ==================== check_graphics_ip ====================
[10:52:56] [PASSED] 12.00 Xe_LP
[10:52:56] [PASSED] 12.10 Xe_LP+
[10:52:56] [PASSED] 12.55 Xe_HPG
[10:52:56] [PASSED] 12.60 Xe_HPC
[10:52:56] [PASSED] 12.70 Xe_LPG
[10:52:56] [PASSED] 12.71 Xe_LPG
[10:52:56] [PASSED] 12.74 Xe_LPG+
[10:52:56] [PASSED] 20.01 Xe2_HPG
[10:52:56] [PASSED] 20.02 Xe2_HPG
[10:52:56] [PASSED] 20.04 Xe2_LPG
[10:52:56] [PASSED] 30.00 Xe3_LPG
[10:52:56] [PASSED] 30.01 Xe3_LPG
[10:52:56] [PASSED] 30.03 Xe3_LPG
[10:52:56] [PASSED] 30.04 Xe3_LPG
[10:52:56] [PASSED] 30.05 Xe3_LPG
[10:52:56] [PASSED] 35.11 Xe3p_XPC
[10:52:56] ================ [PASSED] check_graphics_ip ================
[10:52:56] ===================== check_media_ip ======================
[10:52:56] [PASSED] 12.00 Xe_M
[10:52:56] [PASSED] 12.55 Xe_HPM
[10:52:56] [PASSED] 13.00 Xe_LPM+
[10:52:56] [PASSED] 13.01 Xe2_HPM
[10:52:56] [PASSED] 20.00 Xe2_LPM
[10:52:56] [PASSED] 30.00 Xe3_LPM
[10:52:56] [PASSED] 30.02 Xe3_LPM
[10:52:56] [PASSED] 35.00 Xe3p_LPM
[10:52:56] [PASSED] 35.03 Xe3p_HPM
[10:52:56] ================= [PASSED] check_media_ip ==================
[10:52:56] =================== check_platform_desc ===================
[10:52:56] [PASSED] 0x9A60 (TIGERLAKE)
[10:52:56] [PASSED] 0x9A68 (TIGERLAKE)
[10:52:56] [PASSED] 0x9A70 (TIGERLAKE)
[10:52:56] [PASSED] 0x9A40 (TIGERLAKE)
[10:52:56] [PASSED] 0x9A49 (TIGERLAKE)
[10:52:56] [PASSED] 0x9A59 (TIGERLAKE)
[10:52:56] [PASSED] 0x9A78 (TIGERLAKE)
[10:52:56] [PASSED] 0x9AC0 (TIGERLAKE)
[10:52:56] [PASSED] 0x9AC9 (TIGERLAKE)
[10:52:56] [PASSED] 0x9AD9 (TIGERLAKE)
[10:52:56] [PASSED] 0x9AF8 (TIGERLAKE)
[10:52:56] [PASSED] 0x4C80 (ROCKETLAKE)
[10:52:56] [PASSED] 0x4C8A (ROCKETLAKE)
[10:52:56] [PASSED] 0x4C8B (ROCKETLAKE)
[10:52:56] [PASSED] 0x4C8C (ROCKETLAKE)
[10:52:56] [PASSED] 0x4C90 (ROCKETLAKE)
[10:52:56] [PASSED] 0x4C9A (ROCKETLAKE)
[10:52:56] [PASSED] 0x4680 (ALDERLAKE_S)
[10:52:56] [PASSED] 0x4682 (ALDERLAKE_S)
[10:52:56] [PASSED] 0x4688 (ALDERLAKE_S)
[10:52:56] [PASSED] 0x468A (ALDERLAKE_S)
[10:52:56] [PASSED] 0x468B (ALDERLAKE_S)
[10:52:56] [PASSED] 0x4690 (ALDERLAKE_S)
[10:52:56] [PASSED] 0x4692 (ALDERLAKE_S)
[10:52:56] [PASSED] 0x4693 (ALDERLAKE_S)
[10:52:56] [PASSED] 0x46A0 (ALDERLAKE_P)
[10:52:56] [PASSED] 0x46A1 (ALDERLAKE_P)
[10:52:56] [PASSED] 0x46A2 (ALDERLAKE_P)
[10:52:56] [PASSED] 0x46A3 (ALDERLAKE_P)
[10:52:56] [PASSED] 0x46A6 (ALDERLAKE_P)
[10:52:56] [PASSED] 0x46A8 (ALDERLAKE_P)
[10:52:56] [PASSED] 0x46AA (ALDERLAKE_P)
[10:52:56] [PASSED] 0x462A (ALDERLAKE_P)
[10:52:56] [PASSED] 0x4626 (ALDERLAKE_P)
[10:52:56] [PASSED] 0x4628 (ALDERLAKE_P)
stty: 'standard input': Inappropriate ioctl for device
[10:52:56] [PASSED] 0x46B0 (ALDERLAKE_P)
[10:52:56] [PASSED] 0x46B1 (ALDERLAKE_P)
[10:52:56] [PASSED] 0x46B2 (ALDERLAKE_P)
[10:52:56] [PASSED] 0x46B3 (ALDERLAKE_P)
[10:52:56] [PASSED] 0x46C0 (ALDERLAKE_P)
[10:52:56] [PASSED] 0x46C1 (ALDERLAKE_P)
[10:52:56] [PASSED] 0x46C2 (ALDERLAKE_P)
[10:52:56] [PASSED] 0x46C3 (ALDERLAKE_P)
[10:52:56] [PASSED] 0x46D0 (ALDERLAKE_N)
[10:52:56] [PASSED] 0x46D1 (ALDERLAKE_N)
[10:52:56] [PASSED] 0x46D2 (ALDERLAKE_N)
[10:52:56] [PASSED] 0x46D3 (ALDERLAKE_N)
[10:52:56] [PASSED] 0x46D4 (ALDERLAKE_N)
[10:52:56] [PASSED] 0xA721 (ALDERLAKE_P)
[10:52:56] [PASSED] 0xA7A1 (ALDERLAKE_P)
[10:52:56] [PASSED] 0xA7A9 (ALDERLAKE_P)
[10:52:56] [PASSED] 0xA7AC (ALDERLAKE_P)
[10:52:56] [PASSED] 0xA7AD (ALDERLAKE_P)
[10:52:56] [PASSED] 0xA720 (ALDERLAKE_P)
[10:52:56] [PASSED] 0xA7A0 (ALDERLAKE_P)
[10:52:56] [PASSED] 0xA7A8 (ALDERLAKE_P)
[10:52:56] [PASSED] 0xA7AA (ALDERLAKE_P)
[10:52:56] [PASSED] 0xA7AB (ALDERLAKE_P)
[10:52:56] [PASSED] 0xA780 (ALDERLAKE_S)
[10:52:56] [PASSED] 0xA781 (ALDERLAKE_S)
[10:52:56] [PASSED] 0xA782 (ALDERLAKE_S)
[10:52:56] [PASSED] 0xA783 (ALDERLAKE_S)
[10:52:56] [PASSED] 0xA788 (ALDERLAKE_S)
[10:52:56] [PASSED] 0xA789 (ALDERLAKE_S)
[10:52:56] [PASSED] 0xA78A (ALDERLAKE_S)
[10:52:56] [PASSED] 0xA78B (ALDERLAKE_S)
[10:52:56] [PASSED] 0x4905 (DG1)
[10:52:56] [PASSED] 0x4906 (DG1)
[10:52:56] [PASSED] 0x4907 (DG1)
[10:52:56] [PASSED] 0x4908 (DG1)
[10:52:56] [PASSED] 0x4909 (DG1)
[10:52:56] [PASSED] 0x56C0 (DG2)
[10:52:56] [PASSED] 0x56C2 (DG2)
[10:52:56] [PASSED] 0x56C1 (DG2)
[10:52:56] [PASSED] 0x7D51 (METEORLAKE)
[10:52:56] [PASSED] 0x7DD1 (METEORLAKE)
[10:52:56] [PASSED] 0x7D41 (METEORLAKE)
[10:52:56] [PASSED] 0x7D67 (METEORLAKE)
[10:52:56] [PASSED] 0xB640 (METEORLAKE)
[10:52:56] [PASSED] 0x56A0 (DG2)
[10:52:56] [PASSED] 0x56A1 (DG2)
[10:52:56] [PASSED] 0x56A2 (DG2)
[10:52:56] [PASSED] 0x56BE (DG2)
[10:52:56] [PASSED] 0x56BF (DG2)
[10:52:56] [PASSED] 0x5690 (DG2)
[10:52:56] [PASSED] 0x5691 (DG2)
[10:52:56] [PASSED] 0x5692 (DG2)
[10:52:56] [PASSED] 0x56A5 (DG2)
[10:52:56] [PASSED] 0x56A6 (DG2)
[10:52:56] [PASSED] 0x56B0 (DG2)
[10:52:56] [PASSED] 0x56B1 (DG2)
[10:52:56] [PASSED] 0x56BA (DG2)
[10:52:56] [PASSED] 0x56BB (DG2)
[10:52:56] [PASSED] 0x56BC (DG2)
[10:52:56] [PASSED] 0x56BD (DG2)
[10:52:56] [PASSED] 0x5693 (DG2)
[10:52:56] [PASSED] 0x5694 (DG2)
[10:52:56] [PASSED] 0x5695 (DG2)
[10:52:56] [PASSED] 0x56A3 (DG2)
[10:52:56] [PASSED] 0x56A4 (DG2)
[10:52:56] [PASSED] 0x56B2 (DG2)
[10:52:56] [PASSED] 0x56B3 (DG2)
[10:52:56] [PASSED] 0x5696 (DG2)
[10:52:56] [PASSED] 0x5697 (DG2)
[10:52:56] [PASSED] 0xB69 (PVC)
[10:52:56] [PASSED] 0xB6E (PVC)
[10:52:56] [PASSED] 0xBD4 (PVC)
[10:52:56] [PASSED] 0xBD5 (PVC)
[10:52:56] [PASSED] 0xBD6 (PVC)
[10:52:56] [PASSED] 0xBD7 (PVC)
[10:52:56] [PASSED] 0xBD8 (PVC)
[10:52:56] [PASSED] 0xBD9 (PVC)
[10:52:56] [PASSED] 0xBDA (PVC)
[10:52:56] [PASSED] 0xBDB (PVC)
[10:52:56] [PASSED] 0xBE0 (PVC)
[10:52:56] [PASSED] 0xBE1 (PVC)
[10:52:56] [PASSED] 0xBE5 (PVC)
[10:52:56] [PASSED] 0x7D40 (METEORLAKE)
[10:52:56] [PASSED] 0x7D45 (METEORLAKE)
[10:52:56] [PASSED] 0x7D55 (METEORLAKE)
[10:52:56] [PASSED] 0x7D60 (METEORLAKE)
[10:52:56] [PASSED] 0x7DD5 (METEORLAKE)
[10:52:56] [PASSED] 0x6420 (LUNARLAKE)
[10:52:56] [PASSED] 0x64A0 (LUNARLAKE)
[10:52:56] [PASSED] 0x64B0 (LUNARLAKE)
[10:52:56] [PASSED] 0xE202 (BATTLEMAGE)
[10:52:56] [PASSED] 0xE209 (BATTLEMAGE)
[10:52:56] [PASSED] 0xE20B (BATTLEMAGE)
[10:52:56] [PASSED] 0xE20C (BATTLEMAGE)
[10:52:56] [PASSED] 0xE20D (BATTLEMAGE)
[10:52:56] [PASSED] 0xE210 (BATTLEMAGE)
[10:52:56] [PASSED] 0xE211 (BATTLEMAGE)
[10:52:56] [PASSED] 0xE212 (BATTLEMAGE)
[10:52:56] [PASSED] 0xE216 (BATTLEMAGE)
[10:52:56] [PASSED] 0xE220 (BATTLEMAGE)
[10:52:56] [PASSED] 0xE221 (BATTLEMAGE)
[10:52:56] [PASSED] 0xE222 (BATTLEMAGE)
[10:52:56] [PASSED] 0xE223 (BATTLEMAGE)
[10:52:56] [PASSED] 0xB080 (PANTHERLAKE)
[10:52:56] [PASSED] 0xB081 (PANTHERLAKE)
[10:52:56] [PASSED] 0xB082 (PANTHERLAKE)
[10:52:56] [PASSED] 0xB083 (PANTHERLAKE)
[10:52:56] [PASSED] 0xB084 (PANTHERLAKE)
[10:52:56] [PASSED] 0xB085 (PANTHERLAKE)
[10:52:56] [PASSED] 0xB086 (PANTHERLAKE)
[10:52:56] [PASSED] 0xB087 (PANTHERLAKE)
[10:52:56] [PASSED] 0xB08F (PANTHERLAKE)
[10:52:56] [PASSED] 0xB090 (PANTHERLAKE)
[10:52:56] [PASSED] 0xB0A0 (PANTHERLAKE)
[10:52:56] [PASSED] 0xB0B0 (PANTHERLAKE)
[10:52:56] [PASSED] 0xFD80 (PANTHERLAKE)
[10:52:56] [PASSED] 0xFD81 (PANTHERLAKE)
[10:52:56] [PASSED] 0xD740 (NOVALAKE_S)
[10:52:56] [PASSED] 0xD741 (NOVALAKE_S)
[10:52:56] [PASSED] 0xD742 (NOVALAKE_S)
[10:52:56] [PASSED] 0xD743 (NOVALAKE_S)
[10:52:56] [PASSED] 0xD744 (NOVALAKE_S)
[10:52:56] [PASSED] 0xD745 (NOVALAKE_S)
[10:52:56] [PASSED] 0x674C (CRESCENTISLAND)
[10:52:56] =============== [PASSED] check_platform_desc ===============
[10:52:56] ===================== [PASSED] xe_pci ======================
[10:52:56] =================== xe_rtp (2 subtests) ====================
[10:52:56] =============== xe_rtp_process_to_sr_tests ================
[10:52:56] [PASSED] coalesce-same-reg
[10:52:56] [PASSED] no-match-no-add
[10:52:56] [PASSED] match-or
[10:52:56] [PASSED] match-or-xfail
[10:52:56] [PASSED] no-match-no-add-multiple-rules
[10:52:56] [PASSED] two-regs-two-entries
[10:52:56] [PASSED] clr-one-set-other
[10:52:56] [PASSED] set-field
[10:52:56] [PASSED] conflict-duplicate
[10:52:56] [PASSED] conflict-not-disjoint
[10:52:56] [PASSED] conflict-reg-type
[10:52:56] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[10:52:56] ================== xe_rtp_process_tests ===================
[10:52:56] [PASSED] active1
[10:52:56] [PASSED] active2
[10:52:56] [PASSED] active-inactive
[10:52:56] [PASSED] inactive-active
[10:52:56] [PASSED] inactive-1st_or_active-inactive
[10:52:56] [PASSED] inactive-2nd_or_active-inactive
[10:52:56] [PASSED] inactive-last_or_active-inactive
[10:52:56] [PASSED] inactive-no_or_active-inactive
[10:52:56] ============== [PASSED] xe_rtp_process_tests ===============
[10:52:56] ===================== [PASSED] xe_rtp ======================
[10:52:56] ==================== xe_wa (1 subtest) =====================
[10:52:56] ======================== xe_wa_gt =========================
[10:52:56] [PASSED] TIGERLAKE B0
[10:52:56] [PASSED] DG1 A0
[10:52:56] [PASSED] DG1 B0
[10:52:56] [PASSED] ALDERLAKE_S A0
[10:52:56] [PASSED] ALDERLAKE_S B0
[10:52:56] [PASSED] ALDERLAKE_S C0
[10:52:56] [PASSED] ALDERLAKE_S D0
[10:52:56] [PASSED] ALDERLAKE_P A0
[10:52:56] [PASSED] ALDERLAKE_P B0
[10:52:56] [PASSED] ALDERLAKE_P C0
[10:52:56] [PASSED] ALDERLAKE_S RPLS D0
[10:52:56] [PASSED] ALDERLAKE_P RPLU E0
[10:52:56] [PASSED] DG2 G10 C0
[10:52:56] [PASSED] DG2 G11 B1
[10:52:56] [PASSED] DG2 G12 A1
[10:52:56] [PASSED] METEORLAKE 12.70(Xe_LPG) A0 13.00(Xe_LPM+) A0
[10:52:56] [PASSED] METEORLAKE 12.71(Xe_LPG) A0 13.00(Xe_LPM+) A0
[10:52:56] [PASSED] METEORLAKE 12.74(Xe_LPG+) A0 13.00(Xe_LPM+) A0
[10:52:56] [PASSED] LUNARLAKE 20.04(Xe2_LPG) A0 20.00(Xe2_LPM) A0
[10:52:56] [PASSED] LUNARLAKE 20.04(Xe2_LPG) B0 20.00(Xe2_LPM) A0
[10:52:56] [PASSED] BATTLEMAGE 20.01(Xe2_HPG) A0 13.01(Xe2_HPM) A1
[10:52:56] [PASSED] PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0
[10:52:56] ==================== [PASSED] xe_wa_gt =====================
[10:52:56] ====================== [PASSED] xe_wa ======================
[10:52:56] ============================================================
[10:52:56] Testing complete. Ran 512 tests: passed: 494, skipped: 18
[10:52:56] Elapsed time: 36.316s total, 4.207s configuring, 31.592s building, 0.465s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[10:52:56] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[10:52:58] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[10:53:23] Starting KUnit Kernel (1/1)...
[10:53:23] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[10:53:23] ============ drm_test_pick_cmdline (2 subtests) ============
[10:53:23] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[10:53:23] =============== drm_test_pick_cmdline_named ===============
[10:53:23] [PASSED] NTSC
[10:53:23] [PASSED] NTSC-J
[10:53:23] [PASSED] PAL
[10:53:23] [PASSED] PAL-M
[10:53:23] =========== [PASSED] drm_test_pick_cmdline_named ===========
[10:53:23] ============== [PASSED] drm_test_pick_cmdline ==============
[10:53:23] == drm_test_atomic_get_connector_for_encoder (1 subtest) ===
[10:53:23] [PASSED] drm_test_drm_atomic_get_connector_for_encoder
[10:53:23] ==== [PASSED] drm_test_atomic_get_connector_for_encoder ====
[10:53:23] =========== drm_validate_clone_mode (2 subtests) ===========
[10:53:23] ============== drm_test_check_in_clone_mode ===============
[10:53:23] [PASSED] in_clone_mode
[10:53:23] [PASSED] not_in_clone_mode
[10:53:23] ========== [PASSED] drm_test_check_in_clone_mode ===========
[10:53:23] =============== drm_test_check_valid_clones ===============
[10:53:23] [PASSED] not_in_clone_mode
[10:53:23] [PASSED] valid_clone
[10:53:23] [PASSED] invalid_clone
[10:53:23] =========== [PASSED] drm_test_check_valid_clones ===========
[10:53:23] ============= [PASSED] drm_validate_clone_mode =============
[10:53:23] ============= drm_validate_modeset (1 subtest) =============
[10:53:23] [PASSED] drm_test_check_connector_changed_modeset
[10:53:23] ============== [PASSED] drm_validate_modeset ===============
[10:53:23] ====== drm_test_bridge_get_current_state (2 subtests) ======
[10:53:23] [PASSED] drm_test_drm_bridge_get_current_state_atomic
[10:53:23] [PASSED] drm_test_drm_bridge_get_current_state_legacy
[10:53:23] ======== [PASSED] drm_test_bridge_get_current_state ========
[10:53:23] ====== drm_test_bridge_helper_reset_crtc (3 subtests) ======
[10:53:23] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic
[10:53:23] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic_disabled
[10:53:23] [PASSED] drm_test_drm_bridge_helper_reset_crtc_legacy
[10:53:23] ======== [PASSED] drm_test_bridge_helper_reset_crtc ========
[10:53:23] ============== drm_bridge_alloc (2 subtests) ===============
[10:53:23] [PASSED] drm_test_drm_bridge_alloc_basic
[10:53:23] [PASSED] drm_test_drm_bridge_alloc_get_put
[10:53:23] ================ [PASSED] drm_bridge_alloc =================
[10:53:23] ================== drm_buddy (9 subtests) ==================
[10:53:23] [PASSED] drm_test_buddy_alloc_limit
[10:53:23] [PASSED] drm_test_buddy_alloc_optimistic
[10:53:23] [PASSED] drm_test_buddy_alloc_pessimistic
[10:53:23] [PASSED] drm_test_buddy_alloc_pathological
[10:53:23] [PASSED] drm_test_buddy_alloc_contiguous
[10:53:23] [PASSED] drm_test_buddy_alloc_clear
[10:53:23] [PASSED] drm_test_buddy_alloc_range_bias
[10:53:23] [PASSED] drm_test_buddy_fragmentation_performance
[10:53:23] [PASSED] drm_test_buddy_alloc_exceeds_max_order
[10:53:23] ==================== [PASSED] drm_buddy ====================
[10:53:23] ============= drm_cmdline_parser (40 subtests) =============
[10:53:23] [PASSED] drm_test_cmdline_force_d_only
[10:53:23] [PASSED] drm_test_cmdline_force_D_only_dvi
[10:53:23] [PASSED] drm_test_cmdline_force_D_only_hdmi
[10:53:23] [PASSED] drm_test_cmdline_force_D_only_not_digital
[10:53:23] [PASSED] drm_test_cmdline_force_e_only
[10:53:23] [PASSED] drm_test_cmdline_res
[10:53:23] [PASSED] drm_test_cmdline_res_vesa
[10:53:23] [PASSED] drm_test_cmdline_res_vesa_rblank
[10:53:23] [PASSED] drm_test_cmdline_res_rblank
[10:53:23] [PASSED] drm_test_cmdline_res_bpp
[10:53:23] [PASSED] drm_test_cmdline_res_refresh
[10:53:23] [PASSED] drm_test_cmdline_res_bpp_refresh
[10:53:23] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[10:53:23] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[10:53:23] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[10:53:23] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[10:53:23] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[10:53:23] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[10:53:23] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[10:53:23] [PASSED] drm_test_cmdline_res_margins_force_on
[10:53:23] [PASSED] drm_test_cmdline_res_vesa_margins
[10:53:23] [PASSED] drm_test_cmdline_name
[10:53:23] [PASSED] drm_test_cmdline_name_bpp
[10:53:23] [PASSED] drm_test_cmdline_name_option
[10:53:23] [PASSED] drm_test_cmdline_name_bpp_option
[10:53:23] [PASSED] drm_test_cmdline_rotate_0
[10:53:23] [PASSED] drm_test_cmdline_rotate_90
[10:53:23] [PASSED] drm_test_cmdline_rotate_180
[10:53:23] [PASSED] drm_test_cmdline_rotate_270
[10:53:23] [PASSED] drm_test_cmdline_hmirror
[10:53:23] [PASSED] drm_test_cmdline_vmirror
[10:53:23] [PASSED] drm_test_cmdline_margin_options
[10:53:23] [PASSED] drm_test_cmdline_multiple_options
[10:53:23] [PASSED] drm_test_cmdline_bpp_extra_and_option
[10:53:23] [PASSED] drm_test_cmdline_extra_and_option
[10:53:23] [PASSED] drm_test_cmdline_freestanding_options
[10:53:23] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[10:53:23] [PASSED] drm_test_cmdline_panel_orientation
[10:53:23] ================ drm_test_cmdline_invalid =================
[10:53:23] [PASSED] margin_only
[10:53:23] [PASSED] interlace_only
[10:53:23] [PASSED] res_missing_x
[10:53:23] [PASSED] res_missing_y
[10:53:23] [PASSED] res_bad_y
[10:53:23] [PASSED] res_missing_y_bpp
[10:53:23] [PASSED] res_bad_bpp
[10:53:23] [PASSED] res_bad_refresh
[10:53:23] [PASSED] res_bpp_refresh_force_on_off
[10:53:23] [PASSED] res_invalid_mode
[10:53:23] [PASSED] res_bpp_wrong_place_mode
[10:53:23] [PASSED] name_bpp_refresh
[10:53:23] [PASSED] name_refresh
[10:53:23] [PASSED] name_refresh_wrong_mode
[10:53:23] [PASSED] name_refresh_invalid_mode
[10:53:23] [PASSED] rotate_multiple
[10:53:23] [PASSED] rotate_invalid_val
[10:53:23] [PASSED] rotate_truncated
[10:53:23] [PASSED] invalid_option
[10:53:23] [PASSED] invalid_tv_option
[10:53:23] [PASSED] truncated_tv_option
[10:53:23] ============ [PASSED] drm_test_cmdline_invalid =============
[10:53:23] =============== drm_test_cmdline_tv_options ===============
[10:53:23] [PASSED] NTSC
[10:53:23] [PASSED] NTSC_443
[10:53:23] [PASSED] NTSC_J
[10:53:23] [PASSED] PAL
[10:53:23] [PASSED] PAL_M
[10:53:23] [PASSED] PAL_N
[10:53:23] [PASSED] SECAM
[10:53:23] [PASSED] MONO_525
[10:53:23] [PASSED] MONO_625
[10:53:23] =========== [PASSED] drm_test_cmdline_tv_options ===========
[10:53:23] =============== [PASSED] drm_cmdline_parser ================
[10:53:23] ========== drmm_connector_hdmi_init (20 subtests) ==========
[10:53:23] [PASSED] drm_test_connector_hdmi_init_valid
[10:53:23] [PASSED] drm_test_connector_hdmi_init_bpc_8
[10:53:23] [PASSED] drm_test_connector_hdmi_init_bpc_10
[10:53:23] [PASSED] drm_test_connector_hdmi_init_bpc_12
[10:53:23] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[10:53:23] [PASSED] drm_test_connector_hdmi_init_bpc_null
[10:53:23] [PASSED] drm_test_connector_hdmi_init_formats_empty
[10:53:23] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[10:53:23] === drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[10:53:23] [PASSED] supported_formats=0x9 yuv420_allowed=1
[10:53:23] [PASSED] supported_formats=0x9 yuv420_allowed=0
[10:53:23] [PASSED] supported_formats=0x3 yuv420_allowed=1
[10:53:23] [PASSED] supported_formats=0x3 yuv420_allowed=0
[10:53:23] === [PASSED] drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[10:53:23] [PASSED] drm_test_connector_hdmi_init_null_ddc
[10:53:23] [PASSED] drm_test_connector_hdmi_init_null_product
[10:53:23] [PASSED] drm_test_connector_hdmi_init_null_vendor
[10:53:23] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[10:53:23] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[10:53:23] [PASSED] drm_test_connector_hdmi_init_product_valid
[10:53:23] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[10:53:23] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[10:53:23] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[10:53:23] ========= drm_test_connector_hdmi_init_type_valid =========
[10:53:23] [PASSED] HDMI-A
[10:53:23] [PASSED] HDMI-B
[10:53:23] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[10:53:23] ======== drm_test_connector_hdmi_init_type_invalid ========
[10:53:23] [PASSED] Unknown
[10:53:23] [PASSED] VGA
[10:53:23] [PASSED] DVI-I
[10:53:23] [PASSED] DVI-D
[10:53:23] [PASSED] DVI-A
[10:53:23] [PASSED] Composite
[10:53:23] [PASSED] SVIDEO
[10:53:23] [PASSED] LVDS
[10:53:23] [PASSED] Component
[10:53:23] [PASSED] DIN
[10:53:23] [PASSED] DP
[10:53:23] [PASSED] TV
[10:53:23] [PASSED] eDP
[10:53:23] [PASSED] Virtual
[10:53:23] [PASSED] DSI
[10:53:23] [PASSED] DPI
[10:53:23] [PASSED] Writeback
[10:53:23] [PASSED] SPI
[10:53:23] [PASSED] USB
[10:53:23] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[10:53:23] ============ [PASSED] drmm_connector_hdmi_init =============
[10:53:23] ============= drmm_connector_init (3 subtests) =============
[10:53:23] [PASSED] drm_test_drmm_connector_init
[10:53:23] [PASSED] drm_test_drmm_connector_init_null_ddc
[10:53:23] ========= drm_test_drmm_connector_init_type_valid =========
[10:53:23] [PASSED] Unknown
[10:53:23] [PASSED] VGA
[10:53:23] [PASSED] DVI-I
[10:53:23] [PASSED] DVI-D
[10:53:23] [PASSED] DVI-A
[10:53:23] [PASSED] Composite
[10:53:23] [PASSED] SVIDEO
[10:53:23] [PASSED] LVDS
[10:53:23] [PASSED] Component
[10:53:23] [PASSED] DIN
[10:53:23] [PASSED] DP
[10:53:23] [PASSED] HDMI-A
[10:53:23] [PASSED] HDMI-B
[10:53:23] [PASSED] TV
[10:53:23] [PASSED] eDP
[10:53:23] [PASSED] Virtual
[10:53:23] [PASSED] DSI
[10:53:23] [PASSED] DPI
[10:53:23] [PASSED] Writeback
[10:53:23] [PASSED] SPI
[10:53:23] [PASSED] USB
[10:53:23] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[10:53:23] =============== [PASSED] drmm_connector_init ===============
[10:53:23] ========= drm_connector_dynamic_init (6 subtests) ==========
[10:53:23] [PASSED] drm_test_drm_connector_dynamic_init
[10:53:23] [PASSED] drm_test_drm_connector_dynamic_init_null_ddc
[10:53:23] [PASSED] drm_test_drm_connector_dynamic_init_not_added
[10:53:23] [PASSED] drm_test_drm_connector_dynamic_init_properties
[10:53:23] ===== drm_test_drm_connector_dynamic_init_type_valid ======
[10:53:23] [PASSED] Unknown
[10:53:23] [PASSED] VGA
[10:53:23] [PASSED] DVI-I
[10:53:23] [PASSED] DVI-D
[10:53:23] [PASSED] DVI-A
[10:53:23] [PASSED] Composite
[10:53:23] [PASSED] SVIDEO
[10:53:23] [PASSED] LVDS
[10:53:23] [PASSED] Component
[10:53:23] [PASSED] DIN
[10:53:23] [PASSED] DP
[10:53:23] [PASSED] HDMI-A
[10:53:23] [PASSED] HDMI-B
[10:53:23] [PASSED] TV
[10:53:23] [PASSED] eDP
[10:53:23] [PASSED] Virtual
[10:53:23] [PASSED] DSI
[10:53:23] [PASSED] DPI
[10:53:23] [PASSED] Writeback
[10:53:23] [PASSED] SPI
[10:53:23] [PASSED] USB
[10:53:23] = [PASSED] drm_test_drm_connector_dynamic_init_type_valid ==
[10:53:23] ======== drm_test_drm_connector_dynamic_init_name =========
[10:53:23] [PASSED] Unknown
[10:53:23] [PASSED] VGA
[10:53:23] [PASSED] DVI-I
[10:53:23] [PASSED] DVI-D
[10:53:23] [PASSED] DVI-A
[10:53:23] [PASSED] Composite
[10:53:23] [PASSED] SVIDEO
[10:53:23] [PASSED] LVDS
[10:53:23] [PASSED] Component
[10:53:23] [PASSED] DIN
[10:53:23] [PASSED] DP
[10:53:23] [PASSED] HDMI-A
[10:53:23] [PASSED] HDMI-B
[10:53:23] [PASSED] TV
[10:53:23] [PASSED] eDP
[10:53:23] [PASSED] Virtual
[10:53:23] [PASSED] DSI
[10:53:23] [PASSED] DPI
[10:53:23] [PASSED] Writeback
[10:53:23] [PASSED] SPI
[10:53:23] [PASSED] USB
[10:53:23] ==== [PASSED] drm_test_drm_connector_dynamic_init_name =====
[10:53:23] =========== [PASSED] drm_connector_dynamic_init ============
[10:53:23] ==== drm_connector_dynamic_register_early (4 subtests) =====
[10:53:23] [PASSED] drm_test_drm_connector_dynamic_register_early_on_list
[10:53:23] [PASSED] drm_test_drm_connector_dynamic_register_early_defer
[10:53:23] [PASSED] drm_test_drm_connector_dynamic_register_early_no_init
[10:53:23] [PASSED] drm_test_drm_connector_dynamic_register_early_no_mode_object
[10:53:23] ====== [PASSED] drm_connector_dynamic_register_early =======
[10:53:23] ======= drm_connector_dynamic_register (7 subtests) ========
[10:53:23] [PASSED] drm_test_drm_connector_dynamic_register_on_list
[10:53:23] [PASSED] drm_test_drm_connector_dynamic_register_no_defer
[10:53:23] [PASSED] drm_test_drm_connector_dynamic_register_no_init
[10:53:23] [PASSED] drm_test_drm_connector_dynamic_register_mode_object
[10:53:23] [PASSED] drm_test_drm_connector_dynamic_register_sysfs
[10:53:23] [PASSED] drm_test_drm_connector_dynamic_register_sysfs_name
[10:53:23] [PASSED] drm_test_drm_connector_dynamic_register_debugfs
[10:53:23] ========= [PASSED] drm_connector_dynamic_register ==========
[10:53:23] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[10:53:23] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[10:53:23] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[10:53:23] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[10:53:23] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[10:53:23] ========== drm_test_get_tv_mode_from_name_valid ===========
[10:53:23] [PASSED] NTSC
[10:53:23] [PASSED] NTSC-443
[10:53:23] [PASSED] NTSC-J
[10:53:23] [PASSED] PAL
[10:53:23] [PASSED] PAL-M
[10:53:23] [PASSED] PAL-N
[10:53:23] [PASSED] SECAM
[10:53:23] [PASSED] Mono
[10:53:23] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[10:53:23] [PASSED] drm_test_get_tv_mode_from_name_truncated
[10:53:23] ============ [PASSED] drm_get_tv_mode_from_name ============
[10:53:23] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[10:53:23] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[10:53:23] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[10:53:23] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[10:53:23] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[10:53:23] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[10:53:23] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[10:53:23] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid =
[10:53:23] [PASSED] VIC 96
[10:53:23] [PASSED] VIC 97
[10:53:23] [PASSED] VIC 101
[10:53:23] [PASSED] VIC 102
[10:53:23] [PASSED] VIC 106
[10:53:23] [PASSED] VIC 107
[10:53:23] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[10:53:23] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[10:53:23] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[10:53:23] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[10:53:23] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[10:53:23] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[10:53:23] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[10:53:23] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[10:53:23] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name ====
[10:53:23] [PASSED] Automatic
[10:53:23] [PASSED] Full
[10:53:23] [PASSED] Limited 16:235
[10:53:23] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[10:53:23] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[10:53:23] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[10:53:23] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[10:53:23] === drm_test_drm_hdmi_connector_get_output_format_name ====
[10:53:23] [PASSED] RGB
[10:53:23] [PASSED] YUV 4:2:0
[10:53:23] [PASSED] YUV 4:2:2
[10:53:23] [PASSED] YUV 4:4:4
[10:53:23] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[10:53:23] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[10:53:23] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[10:53:23] ============= drm_damage_helper (21 subtests) ==============
[10:53:23] [PASSED] drm_test_damage_iter_no_damage
[10:53:23] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[10:53:23] [PASSED] drm_test_damage_iter_no_damage_src_moved
[10:53:23] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[10:53:23] [PASSED] drm_test_damage_iter_no_damage_not_visible
[10:53:23] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[10:53:23] [PASSED] drm_test_damage_iter_no_damage_no_fb
[10:53:23] [PASSED] drm_test_damage_iter_simple_damage
[10:53:23] [PASSED] drm_test_damage_iter_single_damage
[10:53:23] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[10:53:23] [PASSED] drm_test_damage_iter_single_damage_outside_src
[10:53:23] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[10:53:23] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[10:53:23] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[10:53:23] [PASSED] drm_test_damage_iter_single_damage_src_moved
[10:53:23] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[10:53:23] [PASSED] drm_test_damage_iter_damage
[10:53:23] [PASSED] drm_test_damage_iter_damage_one_intersect
[10:53:23] [PASSED] drm_test_damage_iter_damage_one_outside
[10:53:23] [PASSED] drm_test_damage_iter_damage_src_moved
[10:53:23] [PASSED] drm_test_damage_iter_damage_not_visible
[10:53:23] ================ [PASSED] drm_damage_helper ================
[10:53:23] ============== drm_dp_mst_helper (3 subtests) ==============
[10:53:23] ============== drm_test_dp_mst_calc_pbn_mode ==============
[10:53:23] [PASSED] Clock 154000 BPP 30 DSC disabled
[10:53:23] [PASSED] Clock 234000 BPP 30 DSC disabled
[10:53:23] [PASSED] Clock 297000 BPP 24 DSC disabled
[10:53:23] [PASSED] Clock 332880 BPP 24 DSC enabled
[10:53:23] [PASSED] Clock 324540 BPP 24 DSC enabled
[10:53:23] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[10:53:23] ============== drm_test_dp_mst_calc_pbn_div ===============
[10:53:23] [PASSED] Link rate 2000000 lane count 4
[10:53:23] [PASSED] Link rate 2000000 lane count 2
[10:53:23] [PASSED] Link rate 2000000 lane count 1
[10:53:23] [PASSED] Link rate 1350000 lane count 4
[10:53:23] [PASSED] Link rate 1350000 lane count 2
[10:53:23] [PASSED] Link rate 1350000 lane count 1
[10:53:23] [PASSED] Link rate 1000000 lane count 4
[10:53:23] [PASSED] Link rate 1000000 lane count 2
[10:53:23] [PASSED] Link rate 1000000 lane count 1
[10:53:23] [PASSED] Link rate 810000 lane count 4
[10:53:23] [PASSED] Link rate 810000 lane count 2
[10:53:23] [PASSED] Link rate 810000 lane count 1
[10:53:23] [PASSED] Link rate 540000 lane count 4
[10:53:23] [PASSED] Link rate 540000 lane count 2
[10:53:23] [PASSED] Link rate 540000 lane count 1
[10:53:23] [PASSED] Link rate 270000 lane count 4
[10:53:23] [PASSED] Link rate 270000 lane count 2
[10:53:23] [PASSED] Link rate 270000 lane count 1
[10:53:23] [PASSED] Link rate 162000 lane count 4
[10:53:23] [PASSED] Link rate 162000 lane count 2
[10:53:23] [PASSED] Link rate 162000 lane count 1
[10:53:23] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[10:53:23] ========= drm_test_dp_mst_sideband_msg_req_decode =========
[10:53:23] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[10:53:23] [PASSED] DP_POWER_UP_PHY with port number
[10:53:23] [PASSED] DP_POWER_DOWN_PHY with port number
[10:53:23] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[10:53:23] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[10:53:23] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[10:53:23] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[10:53:23] [PASSED] DP_QUERY_PAYLOAD with port number
[10:53:23] [PASSED] DP_QUERY_PAYLOAD with VCPI
[10:53:23] [PASSED] DP_REMOTE_DPCD_READ with port number
[10:53:23] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[10:53:23] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[10:53:23] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[10:53:23] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[10:53:23] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[10:53:23] [PASSED] DP_REMOTE_I2C_READ with port number
[10:53:23] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[10:53:23] [PASSED] DP_REMOTE_I2C_READ with transactions array
[10:53:23] [PASSED] DP_REMOTE_I2C_WRITE with port number
[10:53:23] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[10:53:23] [PASSED] DP_REMOTE_I2C_WRITE with data array
[10:53:23] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[10:53:23] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[10:53:23] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[10:53:23] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[10:53:23] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[10:53:23] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[10:53:23] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[10:53:23] ================ [PASSED] drm_dp_mst_helper ================
[10:53:23] ================== drm_exec (7 subtests) ===================
[10:53:23] [PASSED] sanitycheck
[10:53:23] [PASSED] test_lock
[10:53:23] [PASSED] test_lock_unlock
[10:53:23] [PASSED] test_duplicates
[10:53:23] [PASSED] test_prepare
[10:53:23] [PASSED] test_prepare_array
[10:53:23] [PASSED] test_multiple_loops
[10:53:23] ==================== [PASSED] drm_exec =====================
[10:53:23] =========== drm_format_helper_test (17 subtests) ===========
[10:53:23] ============== drm_test_fb_xrgb8888_to_gray8 ==============
[10:53:23] [PASSED] single_pixel_source_buffer
[10:53:23] [PASSED] single_pixel_clip_rectangle
[10:53:23] [PASSED] well_known_colors
[10:53:23] [PASSED] destination_pitch
[10:53:23] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[10:53:23] ============= drm_test_fb_xrgb8888_to_rgb332 ==============
[10:53:23] [PASSED] single_pixel_source_buffer
[10:53:23] [PASSED] single_pixel_clip_rectangle
[10:53:23] [PASSED] well_known_colors
[10:53:23] [PASSED] destination_pitch
[10:53:23] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[10:53:23] ============= drm_test_fb_xrgb8888_to_rgb565 ==============
[10:53:23] [PASSED] single_pixel_source_buffer
[10:53:23] [PASSED] single_pixel_clip_rectangle
[10:53:23] [PASSED] well_known_colors
[10:53:23] [PASSED] destination_pitch
[10:53:23] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[10:53:23] ============ drm_test_fb_xrgb8888_to_xrgb1555 =============
[10:53:23] [PASSED] single_pixel_source_buffer
[10:53:23] [PASSED] single_pixel_clip_rectangle
[10:53:23] [PASSED] well_known_colors
[10:53:23] [PASSED] destination_pitch
[10:53:23] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[10:53:23] ============ drm_test_fb_xrgb8888_to_argb1555 =============
[10:53:23] [PASSED] single_pixel_source_buffer
[10:53:23] [PASSED] single_pixel_clip_rectangle
[10:53:23] [PASSED] well_known_colors
[10:53:23] [PASSED] destination_pitch
[10:53:23] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[10:53:23] ============ drm_test_fb_xrgb8888_to_rgba5551 =============
[10:53:23] [PASSED] single_pixel_source_buffer
[10:53:23] [PASSED] single_pixel_clip_rectangle
[10:53:23] [PASSED] well_known_colors
[10:53:23] [PASSED] destination_pitch
[10:53:23] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[10:53:23] ============= drm_test_fb_xrgb8888_to_rgb888 ==============
[10:53:23] [PASSED] single_pixel_source_buffer
[10:53:23] [PASSED] single_pixel_clip_rectangle
[10:53:23] [PASSED] well_known_colors
[10:53:23] [PASSED] destination_pitch
[10:53:23] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[10:53:23] ============= drm_test_fb_xrgb8888_to_bgr888 ==============
[10:53:23] [PASSED] single_pixel_source_buffer
[10:53:23] [PASSED] single_pixel_clip_rectangle
[10:53:23] [PASSED] well_known_colors
[10:53:23] [PASSED] destination_pitch
[10:53:23] ========= [PASSED] drm_test_fb_xrgb8888_to_bgr888 ==========
[10:53:23] ============ drm_test_fb_xrgb8888_to_argb8888 =============
[10:53:23] [PASSED] single_pixel_source_buffer
[10:53:23] [PASSED] single_pixel_clip_rectangle
[10:53:23] [PASSED] well_known_colors
[10:53:23] [PASSED] destination_pitch
[10:53:23] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[10:53:23] =========== drm_test_fb_xrgb8888_to_xrgb2101010 ===========
[10:53:23] [PASSED] single_pixel_source_buffer
[10:53:23] [PASSED] single_pixel_clip_rectangle
[10:53:23] [PASSED] well_known_colors
[10:53:23] [PASSED] destination_pitch
[10:53:23] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[10:53:23] =========== drm_test_fb_xrgb8888_to_argb2101010 ===========
[10:53:23] [PASSED] single_pixel_source_buffer
[10:53:23] [PASSED] single_pixel_clip_rectangle
[10:53:23] [PASSED] well_known_colors
[10:53:23] [PASSED] destination_pitch
[10:53:23] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[10:53:23] ============== drm_test_fb_xrgb8888_to_mono ===============
[10:53:23] [PASSED] single_pixel_source_buffer
[10:53:23] [PASSED] single_pixel_clip_rectangle
[10:53:23] [PASSED] well_known_colors
[10:53:23] [PASSED] destination_pitch
[10:53:23] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[10:53:23] ==================== drm_test_fb_swab =====================
[10:53:23] [PASSED] single_pixel_source_buffer
[10:53:23] [PASSED] single_pixel_clip_rectangle
[10:53:23] [PASSED] well_known_colors
[10:53:23] [PASSED] destination_pitch
[10:53:23] ================ [PASSED] drm_test_fb_swab =================
[10:53:23] ============ drm_test_fb_xrgb8888_to_xbgr8888 =============
[10:53:23] [PASSED] single_pixel_source_buffer
[10:53:23] [PASSED] single_pixel_clip_rectangle
[10:53:23] [PASSED] well_known_colors
[10:53:23] [PASSED] destination_pitch
[10:53:23] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[10:53:23] ============ drm_test_fb_xrgb8888_to_abgr8888 =============
[10:53:23] [PASSED] single_pixel_source_buffer
[10:53:23] [PASSED] single_pixel_clip_rectangle
[10:53:23] [PASSED] well_known_colors
[10:53:23] [PASSED] destination_pitch
[10:53:23] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[10:53:23] ================= drm_test_fb_clip_offset =================
[10:53:23] [PASSED] pass through
[10:53:23] [PASSED] horizontal offset
[10:53:23] [PASSED] vertical offset
[10:53:23] [PASSED] horizontal and vertical offset
[10:53:23] [PASSED] horizontal offset (custom pitch)
[10:53:23] [PASSED] vertical offset (custom pitch)
[10:53:23] [PASSED] horizontal and vertical offset (custom pitch)
[10:53:23] ============= [PASSED] drm_test_fb_clip_offset =============
[10:53:23] =================== drm_test_fb_memcpy ====================
[10:53:23] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[10:53:23] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[10:53:23] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[10:53:23] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[10:53:23] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[10:53:23] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[10:53:23] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[10:53:23] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[10:53:23] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[10:53:23] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[10:53:23] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[10:53:23] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[10:53:23] =============== [PASSED] drm_test_fb_memcpy ================
[10:53:23] ============= [PASSED] drm_format_helper_test ==============
[10:53:23] ================= drm_format (18 subtests) =================
[10:53:23] [PASSED] drm_test_format_block_width_invalid
[10:53:23] [PASSED] drm_test_format_block_width_one_plane
[10:53:23] [PASSED] drm_test_format_block_width_two_plane
[10:53:23] [PASSED] drm_test_format_block_width_three_plane
[10:53:23] [PASSED] drm_test_format_block_width_tiled
[10:53:23] [PASSED] drm_test_format_block_height_invalid
[10:53:23] [PASSED] drm_test_format_block_height_one_plane
[10:53:23] [PASSED] drm_test_format_block_height_two_plane
[10:53:23] [PASSED] drm_test_format_block_height_three_plane
[10:53:23] [PASSED] drm_test_format_block_height_tiled
[10:53:23] [PASSED] drm_test_format_min_pitch_invalid
[10:53:23] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[10:53:23] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[10:53:23] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[10:53:23] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[10:53:23] [PASSED] drm_test_format_min_pitch_two_plane
[10:53:23] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[10:53:23] [PASSED] drm_test_format_min_pitch_tiled
[10:53:23] =================== [PASSED] drm_format ====================
[10:53:23] ============== drm_framebuffer (10 subtests) ===============
[10:53:23] ========== drm_test_framebuffer_check_src_coords ==========
[10:53:23] [PASSED] Success: source fits into fb
[10:53:23] [PASSED] Fail: overflowing fb with x-axis coordinate
[10:53:23] [PASSED] Fail: overflowing fb with y-axis coordinate
[10:53:23] [PASSED] Fail: overflowing fb with source width
[10:53:23] [PASSED] Fail: overflowing fb with source height
[10:53:23] ====== [PASSED] drm_test_framebuffer_check_src_coords ======
[10:53:23] [PASSED] drm_test_framebuffer_cleanup
[10:53:23] =============== drm_test_framebuffer_create ===============
[10:53:23] [PASSED] ABGR8888 normal sizes
[10:53:23] [PASSED] ABGR8888 max sizes
[10:53:23] [PASSED] ABGR8888 pitch greater than min required
[10:53:23] [PASSED] ABGR8888 pitch less than min required
[10:53:23] [PASSED] ABGR8888 Invalid width
[10:53:23] [PASSED] ABGR8888 Invalid buffer handle
[10:53:23] [PASSED] No pixel format
[10:53:23] [PASSED] ABGR8888 Width 0
[10:53:23] [PASSED] ABGR8888 Height 0
[10:53:23] [PASSED] ABGR8888 Out of bound height * pitch combination
[10:53:23] [PASSED] ABGR8888 Large buffer offset
[10:53:23] [PASSED] ABGR8888 Buffer offset for inexistent plane
[10:53:23] [PASSED] ABGR8888 Invalid flag
[10:53:23] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[10:53:23] [PASSED] ABGR8888 Valid buffer modifier
[10:53:23] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[10:53:23] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[10:53:23] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[10:53:23] [PASSED] NV12 Normal sizes
[10:53:23] [PASSED] NV12 Max sizes
[10:53:23] [PASSED] NV12 Invalid pitch
[10:53:23] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[10:53:23] [PASSED] NV12 different modifier per-plane
[10:53:23] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[10:53:23] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[10:53:23] [PASSED] NV12 Modifier for inexistent plane
[10:53:23] [PASSED] NV12 Handle for inexistent plane
[10:53:23] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[10:53:23] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[10:53:23] [PASSED] YVU420 Normal sizes
[10:53:23] [PASSED] YVU420 Max sizes
[10:53:23] [PASSED] YVU420 Invalid pitch
[10:53:23] [PASSED] YVU420 Different pitches
[10:53:23] [PASSED] YVU420 Different buffer offsets/pitches
[10:53:23] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[10:53:23] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[10:53:23] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[10:53:23] [PASSED] YVU420 Valid modifier
[10:53:23] [PASSED] YVU420 Different modifiers per plane
[10:53:23] [PASSED] YVU420 Modifier for inexistent plane
[10:53:23] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR)
[10:53:23] [PASSED] X0L2 Normal sizes
[10:53:23] [PASSED] X0L2 Max sizes
[10:53:23] [PASSED] X0L2 Invalid pitch
[10:53:23] [PASSED] X0L2 Pitch greater than minimum required
[10:53:23] [PASSED] X0L2 Handle for inexistent plane
[10:53:23] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[10:53:23] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[10:53:23] [PASSED] X0L2 Valid modifier
[10:53:23] [PASSED] X0L2 Modifier for inexistent plane
[10:53:23] =========== [PASSED] drm_test_framebuffer_create ===========
[10:53:23] [PASSED] drm_test_framebuffer_free
[10:53:23] [PASSED] drm_test_framebuffer_init
[10:53:23] [PASSED] drm_test_framebuffer_init_bad_format
[10:53:23] [PASSED] drm_test_framebuffer_init_dev_mismatch
[10:53:23] [PASSED] drm_test_framebuffer_lookup
[10:53:23] [PASSED] drm_test_framebuffer_lookup_inexistent
[10:53:23] [PASSED] drm_test_framebuffer_modifiers_not_supported
[10:53:23] ================= [PASSED] drm_framebuffer =================
[10:53:23] ================ drm_gem_shmem (8 subtests) ================
[10:53:23] [PASSED] drm_gem_shmem_test_obj_create
[10:53:23] [PASSED] drm_gem_shmem_test_obj_create_private
[10:53:23] [PASSED] drm_gem_shmem_test_pin_pages
[10:53:23] [PASSED] drm_gem_shmem_test_vmap
[10:53:23] [PASSED] drm_gem_shmem_test_get_sg_table
[10:53:23] [PASSED] drm_gem_shmem_test_get_pages_sgt
[10:53:23] [PASSED] drm_gem_shmem_test_madvise
[10:53:23] [PASSED] drm_gem_shmem_test_purge
[10:53:23] ================== [PASSED] drm_gem_shmem ==================
[10:53:23] === drm_atomic_helper_connector_hdmi_check (27 subtests) ===
[10:53:23] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[10:53:23] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[10:53:23] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[10:53:23] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[10:53:23] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[10:53:23] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[10:53:23] ====== drm_test_check_broadcast_rgb_cea_mode_yuv420 =======
[10:53:23] [PASSED] Automatic
[10:53:23] [PASSED] Full
[10:53:23] [PASSED] Limited 16:235
[10:53:23] == [PASSED] drm_test_check_broadcast_rgb_cea_mode_yuv420 ===
[10:53:23] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[10:53:23] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[10:53:23] [PASSED] drm_test_check_disable_connector
[10:53:23] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[10:53:23] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_rgb
[10:53:23] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_yuv420
[10:53:23] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422
[10:53:23] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420
[10:53:23] [PASSED] drm_test_check_driver_unsupported_fallback_yuv420
[10:53:23] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[10:53:23] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[10:53:23] [PASSED] drm_test_check_output_bpc_dvi
[10:53:23] [PASSED] drm_test_check_output_bpc_format_vic_1
[10:53:23] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[10:53:23] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[10:53:23] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[10:53:23] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[10:53:23] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[10:53:23] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[10:53:23] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[10:53:23] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[10:53:23] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[10:53:23] [PASSED] drm_test_check_broadcast_rgb_value
[10:53:23] [PASSED] drm_test_check_bpc_8_value
[10:53:23] [PASSED] drm_test_check_bpc_10_value
[10:53:23] [PASSED] drm_test_check_bpc_12_value
[10:53:23] [PASSED] drm_test_check_format_value
[10:53:23] [PASSED] drm_test_check_tmds_char_value
[10:53:23] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[10:53:23] = drm_atomic_helper_connector_hdmi_mode_valid (4 subtests) =
[10:53:23] [PASSED] drm_test_check_mode_valid
[10:53:23] [PASSED] drm_test_check_mode_valid_reject
[10:53:23] [PASSED] drm_test_check_mode_valid_reject_rate
[10:53:23] [PASSED] drm_test_check_mode_valid_reject_max_clock
[10:53:23] === [PASSED] drm_atomic_helper_connector_hdmi_mode_valid ===
[10:53:23] = drm_atomic_helper_connector_hdmi_infoframes (5 subtests) =
[10:53:23] [PASSED] drm_test_check_infoframes
[10:53:23] [PASSED] drm_test_check_reject_avi_infoframe
[10:53:23] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_8
[10:53:23] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_10
[10:53:23] [PASSED] drm_test_check_reject_audio_infoframe
[10:53:23] === [PASSED] drm_atomic_helper_connector_hdmi_infoframes ===
[10:53:23] ================= drm_managed (2 subtests) =================
[10:53:23] [PASSED] drm_test_managed_release_action
[10:53:23] [PASSED] drm_test_managed_run_action
[10:53:23] =================== [PASSED] drm_managed ===================
[10:53:23] =================== drm_mm (6 subtests) ====================
[10:53:23] [PASSED] drm_test_mm_init
[10:53:23] [PASSED] drm_test_mm_debug
[10:53:23] [PASSED] drm_test_mm_align32
[10:53:23] [PASSED] drm_test_mm_align64
[10:53:23] [PASSED] drm_test_mm_lowest
[10:53:23] [PASSED] drm_test_mm_highest
[10:53:23] ===================== [PASSED] drm_mm ======================
[10:53:23] ============= drm_modes_analog_tv (5 subtests) =============
[10:53:23] [PASSED] drm_test_modes_analog_tv_mono_576i
[10:53:23] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[10:53:23] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[10:53:23] [PASSED] drm_test_modes_analog_tv_pal_576i
[10:53:23] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[10:53:23] =============== [PASSED] drm_modes_analog_tv ===============
[10:53:23] ============== drm_plane_helper (2 subtests) ===============
[10:53:23] =============== drm_test_check_plane_state ================
[10:53:23] [PASSED] clipping_simple
[10:53:23] [PASSED] clipping_rotate_reflect
[10:53:23] [PASSED] positioning_simple
[10:53:23] [PASSED] upscaling
[10:53:23] [PASSED] downscaling
[10:53:23] [PASSED] rounding1
[10:53:23] [PASSED] rounding2
[10:53:23] [PASSED] rounding3
[10:53:23] [PASSED] rounding4
[10:53:23] =========== [PASSED] drm_test_check_plane_state ============
[10:53:23] =========== drm_test_check_invalid_plane_state ============
[10:53:23] [PASSED] positioning_invalid
[10:53:23] [PASSED] upscaling_invalid
[10:53:23] [PASSED] downscaling_invalid
[10:53:23] ======= [PASSED] drm_test_check_invalid_plane_state ========
[10:53:23] ================ [PASSED] drm_plane_helper =================
[10:53:23] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[10:53:23] ====== drm_test_connector_helper_tv_get_modes_check =======
[10:53:23] [PASSED] None
[10:53:23] [PASSED] PAL
[10:53:23] [PASSED] NTSC
[10:53:23] [PASSED] Both, NTSC Default
[10:53:23] [PASSED] Both, PAL Default
[10:53:23] [PASSED] Both, NTSC Default, with PAL on command-line
[10:53:23] [PASSED] Both, PAL Default, with NTSC on command-line
[10:53:23] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[10:53:23] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[10:53:23] ================== drm_rect (9 subtests) ===================
[10:53:23] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[10:53:23] [PASSED] drm_test_rect_clip_scaled_not_clipped
[10:53:23] [PASSED] drm_test_rect_clip_scaled_clipped
[10:53:23] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[10:53:23] ================= drm_test_rect_intersect =================
[10:53:23] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[10:53:23] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[10:53:23] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[10:53:23] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[10:53:23] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[10:53:23] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[10:53:23] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[10:53:23] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[10:53:23] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[10:53:23] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[10:53:23] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[10:53:23] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[10:53:23] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[10:53:23] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[10:53:23] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
stty: 'standard input': Inappropriate ioctl for device
[10:53:23] ============= [PASSED] drm_test_rect_intersect =============
[10:53:23] ================ drm_test_rect_calc_hscale ================
[10:53:23] [PASSED] normal use
[10:53:23] [PASSED] out of max range
[10:53:23] [PASSED] out of min range
[10:53:23] [PASSED] zero dst
[10:53:23] [PASSED] negative src
[10:53:23] [PASSED] negative dst
[10:53:23] ============ [PASSED] drm_test_rect_calc_hscale ============
[10:53:23] ================ drm_test_rect_calc_vscale ================
[10:53:23] [PASSED] normal use
[10:53:23] [PASSED] out of max range
[10:53:23] [PASSED] out of min range
[10:53:23] [PASSED] zero dst
[10:53:23] [PASSED] negative src
[10:53:23] [PASSED] negative dst
[10:53:23] ============ [PASSED] drm_test_rect_calc_vscale ============
[10:53:23] ================== drm_test_rect_rotate ===================
[10:53:23] [PASSED] reflect-x
[10:53:23] [PASSED] reflect-y
[10:53:23] [PASSED] rotate-0
[10:53:23] [PASSED] rotate-90
[10:53:23] [PASSED] rotate-180
[10:53:23] [PASSED] rotate-270
[10:53:23] ============== [PASSED] drm_test_rect_rotate ===============
[10:53:23] ================ drm_test_rect_rotate_inv =================
[10:53:23] [PASSED] reflect-x
[10:53:23] [PASSED] reflect-y
[10:53:23] [PASSED] rotate-0
[10:53:23] [PASSED] rotate-90
[10:53:23] [PASSED] rotate-180
[10:53:23] [PASSED] rotate-270
[10:53:23] ============ [PASSED] drm_test_rect_rotate_inv =============
[10:53:23] ==================== [PASSED] drm_rect =====================
[10:53:23] ============ drm_sysfb_modeset_test (1 subtest) ============
[10:53:23] ============ drm_test_sysfb_build_fourcc_list =============
[10:53:23] [PASSED] no native formats
[10:53:23] [PASSED] XRGB8888 as native format
[10:53:23] [PASSED] remove duplicates
[10:53:23] [PASSED] convert alpha formats
[10:53:23] [PASSED] random formats
[10:53:23] ======== [PASSED] drm_test_sysfb_build_fourcc_list =========
[10:53:23] ============= [PASSED] drm_sysfb_modeset_test ==============
[10:53:23] ================== drm_fixp (2 subtests) ===================
[10:53:23] [PASSED] drm_test_int2fixp
[10:53:23] [PASSED] drm_test_sm2fixp
[10:53:23] ==================== [PASSED] drm_fixp =====================
[10:53:23] ============================================================
[10:53:23] Testing complete. Ran 630 tests: passed: 630
[10:53:23] Elapsed time: 27.279s total, 1.674s configuring, 25.186s building, 0.378s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig
[10:53:23] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[10:53:25] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[10:53:34] Starting KUnit Kernel (1/1)...
[10:53:34] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[10:53:34] ================= ttm_device (5 subtests) ==================
[10:53:34] [PASSED] ttm_device_init_basic
[10:53:34] [PASSED] ttm_device_init_multiple
[10:53:34] [PASSED] ttm_device_fini_basic
[10:53:34] [PASSED] ttm_device_init_no_vma_man
[10:53:34] ================== ttm_device_init_pools ==================
[10:53:34] [PASSED] No DMA allocations, no DMA32 required
[10:53:34] [PASSED] DMA allocations, DMA32 required
[10:53:34] [PASSED] No DMA allocations, DMA32 required
[10:53:34] [PASSED] DMA allocations, no DMA32 required
[10:53:34] ============== [PASSED] ttm_device_init_pools ==============
[10:53:34] =================== [PASSED] ttm_device ====================
[10:53:34] ================== ttm_pool (8 subtests) ===================
[10:53:34] ================== ttm_pool_alloc_basic ===================
[10:53:34] [PASSED] One page
[10:53:34] [PASSED] More than one page
[10:53:34] [PASSED] Above the allocation limit
[10:53:34] [PASSED] One page, with coherent DMA mappings enabled
[10:53:34] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[10:53:34] ============== [PASSED] ttm_pool_alloc_basic ===============
[10:53:34] ============== ttm_pool_alloc_basic_dma_addr ==============
[10:53:34] [PASSED] One page
[10:53:34] [PASSED] More than one page
[10:53:34] [PASSED] Above the allocation limit
[10:53:34] [PASSED] One page, with coherent DMA mappings enabled
[10:53:34] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[10:53:34] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[10:53:34] [PASSED] ttm_pool_alloc_order_caching_match
[10:53:34] [PASSED] ttm_pool_alloc_caching_mismatch
[10:53:34] [PASSED] ttm_pool_alloc_order_mismatch
[10:53:34] [PASSED] ttm_pool_free_dma_alloc
[10:53:34] [PASSED] ttm_pool_free_no_dma_alloc
[10:53:34] [PASSED] ttm_pool_fini_basic
[10:53:34] ==================== [PASSED] ttm_pool =====================
[10:53:34] ================ ttm_resource (8 subtests) =================
[10:53:34] ================= ttm_resource_init_basic =================
[10:53:34] [PASSED] Init resource in TTM_PL_SYSTEM
[10:53:34] [PASSED] Init resource in TTM_PL_VRAM
[10:53:34] [PASSED] Init resource in a private placement
[10:53:34] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[10:53:34] ============= [PASSED] ttm_resource_init_basic =============
[10:53:34] [PASSED] ttm_resource_init_pinned
[10:53:34] [PASSED] ttm_resource_fini_basic
[10:53:34] [PASSED] ttm_resource_manager_init_basic
[10:53:34] [PASSED] ttm_resource_manager_usage_basic
[10:53:34] [PASSED] ttm_resource_manager_set_used_basic
[10:53:34] [PASSED] ttm_sys_man_alloc_basic
[10:53:34] [PASSED] ttm_sys_man_free_basic
[10:53:34] ================== [PASSED] ttm_resource ===================
[10:53:34] =================== ttm_tt (15 subtests) ===================
[10:53:34] ==================== ttm_tt_init_basic ====================
[10:53:34] [PASSED] Page-aligned size
[10:53:34] [PASSED] Extra pages requested
[10:53:34] ================ [PASSED] ttm_tt_init_basic ================
[10:53:34] [PASSED] ttm_tt_init_misaligned
[10:53:34] [PASSED] ttm_tt_fini_basic
[10:53:34] [PASSED] ttm_tt_fini_sg
[10:53:34] [PASSED] ttm_tt_fini_shmem
[10:53:34] [PASSED] ttm_tt_create_basic
[10:53:34] [PASSED] ttm_tt_create_invalid_bo_type
[10:53:34] [PASSED] ttm_tt_create_ttm_exists
[10:53:34] [PASSED] ttm_tt_create_failed
[10:53:34] [PASSED] ttm_tt_destroy_basic
[10:53:34] [PASSED] ttm_tt_populate_null_ttm
[10:53:34] [PASSED] ttm_tt_populate_populated_ttm
[10:53:34] [PASSED] ttm_tt_unpopulate_basic
[10:53:34] [PASSED] ttm_tt_unpopulate_empty_ttm
[10:53:34] [PASSED] ttm_tt_swapin_basic
[10:53:34] ===================== [PASSED] ttm_tt ======================
[10:53:34] =================== ttm_bo (14 subtests) ===================
[10:53:34] =========== ttm_bo_reserve_optimistic_no_ticket ===========
[10:53:34] [PASSED] Cannot be interrupted and sleeps
[10:53:34] [PASSED] Cannot be interrupted, locks straight away
[10:53:34] [PASSED] Can be interrupted, sleeps
[10:53:34] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[10:53:34] [PASSED] ttm_bo_reserve_locked_no_sleep
[10:53:34] [PASSED] ttm_bo_reserve_no_wait_ticket
[10:53:34] [PASSED] ttm_bo_reserve_double_resv
[10:53:34] [PASSED] ttm_bo_reserve_interrupted
[10:53:34] [PASSED] ttm_bo_reserve_deadlock
[10:53:34] [PASSED] ttm_bo_unreserve_basic
[10:53:34] [PASSED] ttm_bo_unreserve_pinned
[10:53:34] [PASSED] ttm_bo_unreserve_bulk
[10:53:34] [PASSED] ttm_bo_fini_basic
[10:53:34] [PASSED] ttm_bo_fini_shared_resv
[10:53:34] [PASSED] ttm_bo_pin_basic
[10:53:34] [PASSED] ttm_bo_pin_unpin_resource
[10:53:34] [PASSED] ttm_bo_multiple_pin_one_unpin
[10:53:34] ===================== [PASSED] ttm_bo ======================
[10:53:34] ============== ttm_bo_validate (21 subtests) ===============
[10:53:34] ============== ttm_bo_init_reserved_sys_man ===============
[10:53:34] [PASSED] Buffer object for userspace
[10:53:34] [PASSED] Kernel buffer object
[10:53:34] [PASSED] Shared buffer object
[10:53:34] ========== [PASSED] ttm_bo_init_reserved_sys_man ===========
[10:53:34] ============== ttm_bo_init_reserved_mock_man ==============
[10:53:34] [PASSED] Buffer object for userspace
[10:53:34] [PASSED] Kernel buffer object
[10:53:34] [PASSED] Shared buffer object
[10:53:34] ========== [PASSED] ttm_bo_init_reserved_mock_man ==========
[10:53:34] [PASSED] ttm_bo_init_reserved_resv
[10:53:34] ================== ttm_bo_validate_basic ==================
[10:53:34] [PASSED] Buffer object for userspace
[10:53:34] [PASSED] Kernel buffer object
[10:53:34] [PASSED] Shared buffer object
[10:53:34] ============== [PASSED] ttm_bo_validate_basic ==============
[10:53:34] [PASSED] ttm_bo_validate_invalid_placement
[10:53:34] ============= ttm_bo_validate_same_placement ==============
[10:53:34] [PASSED] System manager
[10:53:34] [PASSED] VRAM manager
[10:53:34] ========= [PASSED] ttm_bo_validate_same_placement ==========
[10:53:34] [PASSED] ttm_bo_validate_failed_alloc
[10:53:34] [PASSED] ttm_bo_validate_pinned
[10:53:34] [PASSED] ttm_bo_validate_busy_placement
[10:53:34] ================ ttm_bo_validate_multihop =================
[10:53:34] [PASSED] Buffer object for userspace
[10:53:34] [PASSED] Kernel buffer object
[10:53:34] [PASSED] Shared buffer object
[10:53:34] ============ [PASSED] ttm_bo_validate_multihop =============
[10:53:34] ========== ttm_bo_validate_no_placement_signaled ==========
[10:53:34] [PASSED] Buffer object in system domain, no page vector
[10:53:34] [PASSED] Buffer object in system domain with an existing page vector
[10:53:34] ====== [PASSED] ttm_bo_validate_no_placement_signaled ======
[10:53:34] ======== ttm_bo_validate_no_placement_not_signaled ========
[10:53:34] [PASSED] Buffer object for userspace
[10:53:34] [PASSED] Kernel buffer object
[10:53:34] [PASSED] Shared buffer object
[10:53:34] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ====
[10:53:34] [PASSED] ttm_bo_validate_move_fence_signaled
[10:53:35] ========= ttm_bo_validate_move_fence_not_signaled =========
[10:53:35] [PASSED] Waits for GPU
[10:53:35] [PASSED] Tries to lock straight away
[10:53:35] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled =====
[10:53:35] [PASSED] ttm_bo_validate_happy_evict
[10:53:35] [PASSED] ttm_bo_validate_all_pinned_evict
[10:53:35] [PASSED] ttm_bo_validate_allowed_only_evict
[10:53:35] [PASSED] ttm_bo_validate_deleted_evict
[10:53:35] [PASSED] ttm_bo_validate_busy_domain_evict
[10:53:35] [PASSED] ttm_bo_validate_evict_gutting
[10:53:35] [PASSED] ttm_bo_validate_recrusive_evict
stty: 'standard input': Inappropriate ioctl for device
[10:53:35] ================= [PASSED] ttm_bo_validate =================
[10:53:35] ============================================================
[10:53:35] Testing complete. Ran 101 tests: passed: 101
[10:53:35] Elapsed time: 11.150s total, 1.676s configuring, 9.258s building, 0.189s running
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 15+ messages in thread
* ✗ Xe.CI.BAT: failure for drm/xe: Privatize struct xe_ggtt. (rev4)
2026-01-26 10:45 [PATCH v6 0/5] drm/xe: Privatize struct xe_ggtt Maarten Lankhorst
` (6 preceding siblings ...)
2026-01-26 10:53 ` ✓ CI.KUnit: success " Patchwork
@ 2026-01-26 11:46 ` Patchwork
2026-01-26 13:34 ` ✗ Xe.CI.Full: " Patchwork
8 siblings, 0 replies; 15+ messages in thread
From: Patchwork @ 2026-01-26 11:46 UTC (permalink / raw)
To: Maarten Lankhorst; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 1722 bytes --]
== Series Details ==
Series: drm/xe: Privatize struct xe_ggtt. (rev4)
URL : https://patchwork.freedesktop.org/series/160006/
State : failure
== Summary ==
CI Bug Log - changes from xe-4447-6d7af7c5b6b121d5595b64be7dfcbf33be53287b_BAT -> xe-pw-160006v4_BAT
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with xe-pw-160006v4_BAT absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in xe-pw-160006v4_BAT, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
to document this new failure mode, which will reduce false positives in CI.
Participating hosts (12 -> 12)
------------------------------
No changes in participating hosts
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in xe-pw-160006v4_BAT:
### IGT changes ###
#### Possible regressions ####
* igt@xe_module_load@load:
- bat-bmg-1: [PASS][1] -> [ABORT][2]
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4447-6d7af7c5b6b121d5595b64be7dfcbf33be53287b/bat-bmg-1/igt@xe_module_load@load.html
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/bat-bmg-1/igt@xe_module_load@load.html
Build changes
-------------
* IGT: IGT_8716 -> IGT_8717
* Linux: xe-4447-6d7af7c5b6b121d5595b64be7dfcbf33be53287b -> xe-pw-160006v4
IGT_8716: 8716
IGT_8717: 8717
xe-4447-6d7af7c5b6b121d5595b64be7dfcbf33be53287b: 6d7af7c5b6b121d5595b64be7dfcbf33be53287b
xe-pw-160006v4: 160006v4
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/index.html
[-- Attachment #2: Type: text/html, Size: 2321 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* ✗ Xe.CI.Full: failure for drm/xe: Privatize struct xe_ggtt. (rev4)
2026-01-26 10:45 [PATCH v6 0/5] drm/xe: Privatize struct xe_ggtt Maarten Lankhorst
` (7 preceding siblings ...)
2026-01-26 11:46 ` ✗ Xe.CI.BAT: failure " Patchwork
@ 2026-01-26 13:34 ` Patchwork
8 siblings, 0 replies; 15+ messages in thread
From: Patchwork @ 2026-01-26 13:34 UTC (permalink / raw)
To: Maarten Lankhorst; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 44937 bytes --]
== Series Details ==
Series: drm/xe: Privatize struct xe_ggtt. (rev4)
URL : https://patchwork.freedesktop.org/series/160006/
State : failure
== Summary ==
CI Bug Log - changes from xe-4447-6d7af7c5b6b121d5595b64be7dfcbf33be53287b_FULL -> xe-pw-160006v4_FULL
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with xe-pw-160006v4_FULL absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in xe-pw-160006v4_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-160006v4_FULL:
### IGT changes ###
#### Possible regressions ####
* igt@kms_pipe_crc_basic@suspend-read-crc@pipe-a-edp-1:
- shard-lnl: [PASS][1] -> [ABORT][2] +1 other test abort
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4447-6d7af7c5b6b121d5595b64be7dfcbf33be53287b/shard-lnl-4/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-a-edp-1.html
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-2/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-a-edp-1.html
* igt@kms_vblank@ts-continuation-modeset-rpm@pipe-a-edp-1:
- shard-lnl: [PASS][3] -> [SKIP][4] +2 other tests skip
[3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4447-6d7af7c5b6b121d5595b64be7dfcbf33be53287b/shard-lnl-5/igt@kms_vblank@ts-continuation-modeset-rpm@pipe-a-edp-1.html
[4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-2/igt@kms_vblank@ts-continuation-modeset-rpm@pipe-a-edp-1.html
Known issues
------------
Here are the changes found in xe-pw-160006v4_FULL that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@kms_big_fb@linear-8bpp-rotate-90:
- shard-bmg: NOTRUN -> [SKIP][5] ([Intel XE#2327]) +2 other tests skip
[5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-2/igt@kms_big_fb@linear-8bpp-rotate-90.html
* igt@kms_big_fb@linear-max-hw-stride-32bpp-rotate-180-hflip:
- shard-bmg: NOTRUN -> [SKIP][6] ([Intel XE#7059])
[6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-10/igt@kms_big_fb@linear-max-hw-stride-32bpp-rotate-180-hflip.html
* igt@kms_big_fb@linear-max-hw-stride-64bpp-rotate-0-hflip:
- shard-lnl: NOTRUN -> [SKIP][7] ([Intel XE#7059])
[7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-4/igt@kms_big_fb@linear-max-hw-stride-64bpp-rotate-0-hflip.html
* igt@kms_big_fb@y-tiled-32bpp-rotate-270:
- shard-bmg: NOTRUN -> [SKIP][8] ([Intel XE#1124]) +5 other tests skip
[8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-1/igt@kms_big_fb@y-tiled-32bpp-rotate-270.html
* igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-180-hflip-async-flip:
- shard-lnl: NOTRUN -> [SKIP][9] ([Intel XE#1124]) +5 other tests skip
[9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-1/igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-180-hflip-async-flip.html
* igt@kms_bw@connected-linear-tiling-2-displays-2160x1440p:
- shard-lnl: NOTRUN -> [SKIP][10] ([Intel XE#2191])
[10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-8/igt@kms_bw@connected-linear-tiling-2-displays-2160x1440p.html
* igt@kms_bw@connected-linear-tiling-3-displays-3840x2160p:
- shard-bmg: NOTRUN -> [SKIP][11] ([Intel XE#2314] / [Intel XE#2894])
[11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-9/igt@kms_bw@connected-linear-tiling-3-displays-3840x2160p.html
* igt@kms_ccs@ccs-on-another-bo-4-tiled-mtl-rc-ccs:
- shard-lnl: NOTRUN -> [SKIP][12] ([Intel XE#2887]) +4 other tests skip
[12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-5/igt@kms_ccs@ccs-on-another-bo-4-tiled-mtl-rc-ccs.html
* igt@kms_ccs@crc-primary-basic-y-tiled-gen12-mc-ccs:
- shard-bmg: NOTRUN -> [SKIP][13] ([Intel XE#2887]) +8 other tests skip
[13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-10/igt@kms_ccs@crc-primary-basic-y-tiled-gen12-mc-ccs.html
* igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-rc-ccs-cc:
- shard-bmg: NOTRUN -> [SKIP][14] ([Intel XE#3432])
[14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-8/igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-rc-ccs-cc.html
* igt@kms_cdclk@mode-transition:
- shard-bmg: NOTRUN -> [SKIP][15] ([Intel XE#2724])
[15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-7/igt@kms_cdclk@mode-transition.html
* igt@kms_chamelium_audio@dp-audio:
- shard-lnl: NOTRUN -> [SKIP][16] ([Intel XE#373])
[16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-4/igt@kms_chamelium_audio@dp-audio.html
* igt@kms_chamelium_color@ctm-max:
- shard-lnl: NOTRUN -> [SKIP][17] ([Intel XE#306]) +1 other test skip
[17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-3/igt@kms_chamelium_color@ctm-max.html
* igt@kms_chamelium_color@degamma:
- shard-bmg: NOTRUN -> [SKIP][18] ([Intel XE#2325])
[18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-1/igt@kms_chamelium_color@degamma.html
* igt@kms_chamelium_hpd@dp-hpd-after-suspend:
- shard-bmg: NOTRUN -> [SKIP][19] ([Intel XE#2252]) +5 other tests skip
[19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-2/igt@kms_chamelium_hpd@dp-hpd-after-suspend.html
* igt@kms_color_pipeline@plane-lut1d-post-ctm3x4:
- shard-lnl: NOTRUN -> [FAIL][20] ([Intel XE#6968]) +3 other tests fail
[20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-1/igt@kms_color_pipeline@plane-lut1d-post-ctm3x4.html
* igt@kms_content_protection@dp-mst-type-1:
- shard-lnl: NOTRUN -> [SKIP][21] ([Intel XE#307] / [Intel XE#6974])
[21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-2/igt@kms_content_protection@dp-mst-type-1.html
- shard-bmg: NOTRUN -> [SKIP][22] ([Intel XE#2390] / [Intel XE#6974])
[22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-1/igt@kms_content_protection@dp-mst-type-1.html
* igt@kms_content_protection@legacy:
- shard-bmg: NOTRUN -> [FAIL][23] ([Intel XE#1178] / [Intel XE#3304]) +3 other tests fail
[23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-10/igt@kms_content_protection@legacy.html
* igt@kms_content_protection@mei-interface:
- shard-lnl: NOTRUN -> [SKIP][24] ([Intel XE#1468])
[24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-3/igt@kms_content_protection@mei-interface.html
- shard-bmg: NOTRUN -> [SKIP][25] ([Intel XE#2341]) +1 other test skip
[25]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-2/igt@kms_content_protection@mei-interface.html
* igt@kms_cursor_crc@cursor-onscreen-512x512:
- shard-lnl: NOTRUN -> [SKIP][26] ([Intel XE#2321])
[26]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-8/igt@kms_cursor_crc@cursor-onscreen-512x512.html
* igt@kms_cursor_crc@cursor-random-256x85:
- shard-bmg: NOTRUN -> [SKIP][27] ([Intel XE#2320]) +1 other test skip
[27]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-2/igt@kms_cursor_crc@cursor-random-256x85.html
* igt@kms_cursor_legacy@2x-cursor-vs-flip-legacy:
- shard-lnl: NOTRUN -> [SKIP][28] ([Intel XE#309]) +1 other test skip
[28]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-7/igt@kms_cursor_legacy@2x-cursor-vs-flip-legacy.html
* igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions-varying-size:
- shard-bmg: NOTRUN -> [SKIP][29] ([Intel XE#2286])
[29]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-9/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions-varying-size.html
* igt@kms_dsc@dsc-fractional-bpp-with-bpc:
- shard-lnl: NOTRUN -> [SKIP][30] ([Intel XE#2244])
[30]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-1/igt@kms_dsc@dsc-fractional-bpp-with-bpc.html
* igt@kms_dsc@dsc-with-bpc:
- shard-bmg: NOTRUN -> [SKIP][31] ([Intel XE#2244])
[31]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-3/igt@kms_dsc@dsc-with-bpc.html
* igt@kms_fbc_dirty_rect@fbc-dirty-rectangle-dirtyfb-tests:
- shard-bmg: NOTRUN -> [SKIP][32] ([Intel XE#4422])
[32]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-8/igt@kms_fbc_dirty_rect@fbc-dirty-rectangle-dirtyfb-tests.html
* igt@kms_fbcon_fbt@fbc-suspend:
- shard-bmg: NOTRUN -> [SKIP][33] ([Intel XE#4156])
[33]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-2/igt@kms_fbcon_fbt@fbc-suspend.html
* igt@kms_fbcon_fbt@psr-suspend:
- shard-lnl: [PASS][34] -> [FAIL][35] ([Intel XE#6831])
[34]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4447-6d7af7c5b6b121d5595b64be7dfcbf33be53287b/shard-lnl-4/igt@kms_fbcon_fbt@psr-suspend.html
[35]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-5/igt@kms_fbcon_fbt@psr-suspend.html
* igt@kms_flip@2x-absolute-wf_vblank-interruptible:
- shard-lnl: NOTRUN -> [SKIP][36] ([Intel XE#1421])
[36]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-5/igt@kms_flip@2x-absolute-wf_vblank-interruptible.html
* igt@kms_flip@blocking-absolute-wf_vblank@a-dp2:
- shard-bmg: NOTRUN -> [DMESG-WARN][37] ([Intel XE#6766])
[37]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-2/igt@kms_flip@blocking-absolute-wf_vblank@a-dp2.html
* igt@kms_flip@blocking-absolute-wf_vblank@b-dp2:
- shard-bmg: NOTRUN -> [ABORT][38] ([Intel XE#5545]) +1 other test abort
[38]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-2/igt@kms_flip@blocking-absolute-wf_vblank@b-dp2.html
* igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-upscaling:
- shard-bmg: NOTRUN -> [SKIP][39] ([Intel XE#2293] / [Intel XE#2380]) +3 other tests skip
[39]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-1/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-upscaling.html
* igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilercccs-downscaling:
- shard-lnl: NOTRUN -> [SKIP][40] ([Intel XE#1401] / [Intel XE#1745]) +1 other test skip
[40]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-4/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilercccs-downscaling.html
* igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilercccs-downscaling@pipe-a-default-mode:
- shard-lnl: NOTRUN -> [SKIP][41] ([Intel XE#1401]) +1 other test skip
[41]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-4/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilercccs-downscaling@pipe-a-default-mode.html
* igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilercccs-downscaling@pipe-a-valid-mode:
- shard-bmg: NOTRUN -> [SKIP][42] ([Intel XE#2293]) +3 other tests skip
[42]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-10/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilercccs-downscaling@pipe-a-valid-mode.html
* igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-onoff:
- shard-bmg: NOTRUN -> [SKIP][43] ([Intel XE#4141]) +10 other tests skip
[43]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-2/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-onoff.html
* igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-cur-indfb-draw-blt:
- shard-lnl: NOTRUN -> [SKIP][44] ([Intel XE#651]) +4 other tests skip
[44]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-4/igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-cur-indfb-draw-blt.html
* igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-mmap-wc:
- shard-bmg: NOTRUN -> [SKIP][45] ([Intel XE#2311]) +19 other tests skip
[45]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-10/igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@fbcdrrs-argb161616f-draw-render:
- shard-bmg: NOTRUN -> [SKIP][46] ([Intel XE#7061]) +5 other tests skip
[46]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-3/igt@kms_frontbuffer_tracking@fbcdrrs-argb161616f-draw-render.html
* igt@kms_frontbuffer_tracking@fbcpsr-suspend:
- shard-lnl: [PASS][47] -> [DMESG-WARN][48] ([Intel XE#7063])
[47]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4447-6d7af7c5b6b121d5595b64be7dfcbf33be53287b/shard-lnl-7/igt@kms_frontbuffer_tracking@fbcpsr-suspend.html
[48]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-3/igt@kms_frontbuffer_tracking@fbcpsr-suspend.html
* igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-draw-render:
- shard-bmg: NOTRUN -> [SKIP][49] ([Intel XE#2313]) +19 other tests skip
[49]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-10/igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-draw-render.html
* igt@kms_frontbuffer_tracking@psr-2p-primscrn-pri-indfb-draw-blt:
- shard-lnl: NOTRUN -> [SKIP][50] ([Intel XE#656]) +12 other tests skip
[50]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-8/igt@kms_frontbuffer_tracking@psr-2p-primscrn-pri-indfb-draw-blt.html
* igt@kms_frontbuffer_tracking@psr-abgr161616f-draw-blt:
- shard-lnl: NOTRUN -> [SKIP][51] ([Intel XE#7061]) +3 other tests skip
[51]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-8/igt@kms_frontbuffer_tracking@psr-abgr161616f-draw-blt.html
* igt@kms_joiner@invalid-modeset-big-joiner:
- shard-bmg: NOTRUN -> [SKIP][52] ([Intel XE#6901])
[52]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-8/igt@kms_joiner@invalid-modeset-big-joiner.html
* igt@kms_panel_fitting@atomic-fastset:
- shard-bmg: NOTRUN -> [SKIP][53] ([Intel XE#2486])
[53]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-9/igt@kms_panel_fitting@atomic-fastset.html
* igt@kms_pipe_stress@stress-xrgb8888-yftiled:
- shard-bmg: NOTRUN -> [SKIP][54] ([Intel XE#6912])
[54]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-7/igt@kms_pipe_stress@stress-xrgb8888-yftiled.html
* igt@kms_plane_multiple@2x-tiling-y:
- shard-lnl: NOTRUN -> [SKIP][55] ([Intel XE#4596])
[55]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-4/igt@kms_plane_multiple@2x-tiling-y.html
* igt@kms_plane_multiple@2x-tiling-yf:
- shard-bmg: NOTRUN -> [SKIP][56] ([Intel XE#5021])
[56]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-4/igt@kms_plane_multiple@2x-tiling-yf.html
* igt@kms_pm_backlight@basic-brightness:
- shard-bmg: NOTRUN -> [SKIP][57] ([Intel XE#870])
[57]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-1/igt@kms_pm_backlight@basic-brightness.html
* igt@kms_pm_rpm@dpms-mode-unset-lpsp:
- shard-bmg: NOTRUN -> [SKIP][58] ([Intel XE#1439] / [Intel XE#836])
[58]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-2/igt@kms_pm_rpm@dpms-mode-unset-lpsp.html
* igt@kms_psr2_sf@fbc-pr-plane-move-sf-dmg-area:
- shard-lnl: NOTRUN -> [SKIP][59] ([Intel XE#1406] / [Intel XE#2893])
[59]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-5/igt@kms_psr2_sf@fbc-pr-plane-move-sf-dmg-area.html
* igt@kms_psr2_sf@fbc-psr2-overlay-plane-update-continuous-sf:
- shard-lnl: NOTRUN -> [SKIP][60] ([Intel XE#1406] / [Intel XE#2893] / [Intel XE#4608])
[60]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-1/igt@kms_psr2_sf@fbc-psr2-overlay-plane-update-continuous-sf.html
* igt@kms_psr2_sf@fbc-psr2-overlay-plane-update-continuous-sf@pipe-b-edp-1:
- shard-lnl: NOTRUN -> [SKIP][61] ([Intel XE#1406] / [Intel XE#4608]) +1 other test skip
[61]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-1/igt@kms_psr2_sf@fbc-psr2-overlay-plane-update-continuous-sf@pipe-b-edp-1.html
* igt@kms_psr2_sf@psr2-primary-plane-update-sf-dmg-area-big-fb:
- shard-bmg: NOTRUN -> [SKIP][62] ([Intel XE#1406] / [Intel XE#1489]) +3 other tests skip
[62]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-1/igt@kms_psr2_sf@psr2-primary-plane-update-sf-dmg-area-big-fb.html
* igt@kms_psr@pr-cursor-plane-move:
- shard-lnl: NOTRUN -> [SKIP][63] ([Intel XE#1406])
[63]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-1/igt@kms_psr@pr-cursor-plane-move.html
* igt@kms_psr@pr-primary-render:
- shard-bmg: NOTRUN -> [SKIP][64] ([Intel XE#1406] / [Intel XE#2234] / [Intel XE#2850]) +7 other tests skip
[64]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-4/igt@kms_psr@pr-primary-render.html
* igt@kms_psr@psr2-primary-render:
- shard-bmg: NOTRUN -> [SKIP][65] ([Intel XE#1406] / [Intel XE#2234])
[65]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-9/igt@kms_psr@psr2-primary-render.html
* igt@kms_psr_stress_test@invalidate-primary-flip-overlay:
- shard-bmg: NOTRUN -> [SKIP][66] ([Intel XE#1406] / [Intel XE#2414])
[66]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-8/igt@kms_psr_stress_test@invalidate-primary-flip-overlay.html
* igt@kms_rotation_crc@primary-rotation-90:
- shard-lnl: NOTRUN -> [SKIP][67] ([Intel XE#3414] / [Intel XE#3904])
[67]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-3/igt@kms_rotation_crc@primary-rotation-90.html
- shard-bmg: NOTRUN -> [SKIP][68] ([Intel XE#3414] / [Intel XE#3904]) +1 other test skip
[68]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-7/igt@kms_rotation_crc@primary-rotation-90.html
* igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0:
- shard-lnl: NOTRUN -> [SKIP][69] ([Intel XE#1127])
[69]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-5/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0.html
- shard-bmg: NOTRUN -> [SKIP][70] ([Intel XE#2330])
[70]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-10/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0.html
* igt@kms_scaling_modes@scaling-mode-center:
- shard-bmg: NOTRUN -> [SKIP][71] ([Intel XE#2413])
[71]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-9/igt@kms_scaling_modes@scaling-mode-center.html
* igt@kms_setmode@basic-clone-single-crtc:
- shard-bmg: NOTRUN -> [SKIP][72] ([Intel XE#1435])
[72]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-2/igt@kms_setmode@basic-clone-single-crtc.html
* igt@kms_setmode@clone-exclusive-crtc:
- shard-lnl: NOTRUN -> [SKIP][73] ([Intel XE#1435])
[73]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-4/igt@kms_setmode@clone-exclusive-crtc.html
* igt@kms_sharpness_filter@invalid-filter-with-scaling-mode:
- shard-bmg: NOTRUN -> [SKIP][74] ([Intel XE#6503]) +1 other test skip
[74]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-10/igt@kms_sharpness_filter@invalid-filter-with-scaling-mode.html
* igt@kms_tv_load_detect@load-detect:
- shard-lnl: NOTRUN -> [SKIP][75] ([Intel XE#330])
[75]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-8/igt@kms_tv_load_detect@load-detect.html
- shard-bmg: NOTRUN -> [SKIP][76] ([Intel XE#2450])
[76]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-8/igt@kms_tv_load_detect@load-detect.html
* igt@kms_vrr@cmrr:
- shard-bmg: NOTRUN -> [SKIP][77] ([Intel XE#2168])
[77]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-7/igt@kms_vrr@cmrr.html
* igt@kms_vrr@cmrr@pipe-a-edp-1:
- shard-lnl: NOTRUN -> [FAIL][78] ([Intel XE#4459]) +1 other test fail
[78]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-3/igt@kms_vrr@cmrr@pipe-a-edp-1.html
* igt@kms_vrr@seamless-rr-switch-virtual@pipe-a-edp-1:
- shard-lnl: [PASS][79] -> [FAIL][80] ([Intel XE#2142]) +1 other test fail
[79]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4447-6d7af7c5b6b121d5595b64be7dfcbf33be53287b/shard-lnl-7/igt@kms_vrr@seamless-rr-switch-virtual@pipe-a-edp-1.html
[80]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-7/igt@kms_vrr@seamless-rr-switch-virtual@pipe-a-edp-1.html
* igt@xe_create@multigpu-create-massive-size:
- shard-bmg: NOTRUN -> [SKIP][81] ([Intel XE#2504])
[81]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-1/igt@xe_create@multigpu-create-massive-size.html
* igt@xe_eudebug@basic-client:
- shard-lnl: NOTRUN -> [SKIP][82] ([Intel XE#4837]) +2 other tests skip
[82]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-7/igt@xe_eudebug@basic-client.html
* igt@xe_eudebug@vm-bind-clear:
- shard-bmg: NOTRUN -> [SKIP][83] ([Intel XE#4837]) +1 other test skip
[83]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-10/igt@xe_eudebug@vm-bind-clear.html
* igt@xe_eudebug_online@pagefault-write-stress:
- shard-bmg: NOTRUN -> [SKIP][84] ([Intel XE#6665] / [Intel XE#6681])
[84]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-10/igt@xe_eudebug_online@pagefault-write-stress.html
* igt@xe_eudebug_online@resume-dss:
- shard-bmg: NOTRUN -> [SKIP][85] ([Intel XE#4837] / [Intel XE#6665]) +2 other tests skip
[85]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-1/igt@xe_eudebug_online@resume-dss.html
* igt@xe_eudebug_online@writes-caching-sram-bb-vram-target-sram:
- shard-lnl: NOTRUN -> [SKIP][86] ([Intel XE#4837] / [Intel XE#6665]) +1 other test skip
[86]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-3/igt@xe_eudebug_online@writes-caching-sram-bb-vram-target-sram.html
* igt@xe_evict@evict-small-cm:
- shard-lnl: NOTRUN -> [SKIP][87] ([Intel XE#688])
[87]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-5/igt@xe_evict@evict-small-cm.html
* igt@xe_exec_basic@multigpu-many-execqueues-many-vm-userptr:
- shard-lnl: NOTRUN -> [SKIP][88] ([Intel XE#1392]) +3 other tests skip
[88]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-5/igt@xe_exec_basic@multigpu-many-execqueues-many-vm-userptr.html
* igt@xe_exec_basic@multigpu-many-execqueues-many-vm-userptr-invalidate:
- shard-bmg: NOTRUN -> [SKIP][89] ([Intel XE#2322]) +10 other tests skip
[89]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-10/igt@xe_exec_basic@multigpu-many-execqueues-many-vm-userptr-invalidate.html
* igt@xe_exec_fault_mode@once-multi-queue-userptr-invalidate-race-imm:
- shard-bmg: NOTRUN -> [SKIP][90] ([Intel XE#7136]) +9 other tests skip
[90]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-2/igt@xe_exec_fault_mode@once-multi-queue-userptr-invalidate-race-imm.html
* igt@xe_exec_fault_mode@twice-multi-queue-invalid-fault:
- shard-lnl: NOTRUN -> [SKIP][91] ([Intel XE#7136]) +5 other tests skip
[91]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-8/igt@xe_exec_fault_mode@twice-multi-queue-invalid-fault.html
* igt@xe_exec_multi_queue@many-queues-preempt-mode-fault-userptr-invalidate:
- shard-lnl: NOTRUN -> [SKIP][92] ([Intel XE#6874]) +8 other tests skip
[92]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-4/igt@xe_exec_multi_queue@many-queues-preempt-mode-fault-userptr-invalidate.html
* igt@xe_exec_multi_queue@max-queues-preempt-mode-basic-smem:
- shard-bmg: NOTRUN -> [SKIP][93] ([Intel XE#6874]) +18 other tests skip
[93]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-2/igt@xe_exec_multi_queue@max-queues-preempt-mode-basic-smem.html
* igt@xe_exec_system_allocator@many-64k-mmap-free-huge:
- shard-lnl: NOTRUN -> [SKIP][94] ([Intel XE#5007]) +1 other test skip
[94]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-8/igt@xe_exec_system_allocator@many-64k-mmap-free-huge.html
* igt@xe_exec_system_allocator@many-64k-mmap-new-huge-nomemset:
- shard-bmg: NOTRUN -> [SKIP][95] ([Intel XE#5007])
[95]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-8/igt@xe_exec_system_allocator@many-64k-mmap-new-huge-nomemset.html
* igt@xe_exec_system_allocator@many-execqueues-mmap-huge-nomemset:
- shard-bmg: NOTRUN -> [SKIP][96] ([Intel XE#4943]) +11 other tests skip
[96]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-2/igt@xe_exec_system_allocator@many-execqueues-mmap-huge-nomemset.html
* igt@xe_exec_system_allocator@many-large-execqueues-mmap-huge-nomemset:
- shard-lnl: NOTRUN -> [SKIP][97] ([Intel XE#4943]) +6 other tests skip
[97]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-8/igt@xe_exec_system_allocator@many-large-execqueues-mmap-huge-nomemset.html
* igt@xe_exec_threads@threads-multi-queue-cm-fd-rebind:
- shard-bmg: NOTRUN -> [SKIP][98] ([Intel XE#7138]) +6 other tests skip
[98]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-9/igt@xe_exec_threads@threads-multi-queue-cm-fd-rebind.html
* igt@xe_exec_threads@threads-multi-queue-mixed-fd-userptr-invalidate:
- shard-lnl: NOTRUN -> [SKIP][99] ([Intel XE#7138]) +4 other tests skip
[99]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-4/igt@xe_exec_threads@threads-multi-queue-mixed-fd-userptr-invalidate.html
* igt@xe_multigpu_svm@mgpu-latency-basic:
- shard-bmg: NOTRUN -> [SKIP][100] ([Intel XE#6964]) +3 other tests skip
[100]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-8/igt@xe_multigpu_svm@mgpu-latency-basic.html
* igt@xe_peer2peer@write:
- shard-bmg: NOTRUN -> [SKIP][101] ([Intel XE#2427] / [Intel XE#6953])
[101]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-10/igt@xe_peer2peer@write.html
* igt@xe_pm@d3cold-mocs:
- shard-bmg: NOTRUN -> [SKIP][102] ([Intel XE#2284]) +1 other test skip
[102]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-2/igt@xe_pm@d3cold-mocs.html
* igt@xe_pm@s3-mocs:
- shard-lnl: NOTRUN -> [SKIP][103] ([Intel XE#584])
[103]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-4/igt@xe_pm@s3-mocs.html
* igt@xe_query@multigpu-query-mem-usage:
- shard-bmg: NOTRUN -> [SKIP][104] ([Intel XE#944])
[104]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-8/igt@xe_query@multigpu-query-mem-usage.html
* igt@xe_sriov_flr@flr-vf1-clear:
- shard-bmg: [PASS][105] -> [FAIL][106] ([Intel XE#6569])
[105]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4447-6d7af7c5b6b121d5595b64be7dfcbf33be53287b/shard-bmg-7/igt@xe_sriov_flr@flr-vf1-clear.html
[106]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-7/igt@xe_sriov_flr@flr-vf1-clear.html
* igt@xe_sriov_vram@vf-access-after-resize-up:
- shard-lnl: NOTRUN -> [SKIP][107] ([Intel XE#6376])
[107]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-3/igt@xe_sriov_vram@vf-access-after-resize-up.html
#### Possible fixes ####
* igt@intel_hwmon@hwmon-write:
- shard-bmg: [FAIL][108] ([Intel XE#4665]) -> [PASS][109]
[108]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4447-6d7af7c5b6b121d5595b64be7dfcbf33be53287b/shard-bmg-4/igt@intel_hwmon@hwmon-write.html
[109]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-4/igt@intel_hwmon@hwmon-write.html
* igt@kms_async_flips@async-flip-with-page-flip-events-linear-atomic@pipe-c-edp-1:
- shard-lnl: [FAIL][110] ([Intel XE#6054]) -> [PASS][111] +3 other tests pass
[110]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4447-6d7af7c5b6b121d5595b64be7dfcbf33be53287b/shard-lnl-7/igt@kms_async_flips@async-flip-with-page-flip-events-linear-atomic@pipe-c-edp-1.html
[111]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-3/igt@kms_async_flips@async-flip-with-page-flip-events-linear-atomic@pipe-c-edp-1.html
* igt@kms_atomic_transition@plane-all-transition-fencing@pipe-b-dp-2:
- shard-bmg: [INCOMPLETE][112] -> [PASS][113] +1 other test pass
[112]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4447-6d7af7c5b6b121d5595b64be7dfcbf33be53287b/shard-bmg-3/igt@kms_atomic_transition@plane-all-transition-fencing@pipe-b-dp-2.html
[113]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-2/igt@kms_atomic_transition@plane-all-transition-fencing@pipe-b-dp-2.html
* igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs:
- shard-bmg: [INCOMPLETE][114] ([Intel XE#7084]) -> [PASS][115] +1 other test pass
[114]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4447-6d7af7c5b6b121d5595b64be7dfcbf33be53287b/shard-bmg-8/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs.html
[115]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-8/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs.html
* igt@kms_cursor_crc@cursor-sliding-256x256:
- shard-bmg: [FAIL][116] ([Intel XE#6747]) -> [PASS][117] +1 other test pass
[116]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4447-6d7af7c5b6b121d5595b64be7dfcbf33be53287b/shard-bmg-2/igt@kms_cursor_crc@cursor-sliding-256x256.html
[117]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-4/igt@kms_cursor_crc@cursor-sliding-256x256.html
* igt@kms_flip@flip-vs-expired-vblank-interruptible:
- shard-lnl: [FAIL][118] ([Intel XE#301] / [Intel XE#3149]) -> [PASS][119] +1 other test pass
[118]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4447-6d7af7c5b6b121d5595b64be7dfcbf33be53287b/shard-lnl-8/igt@kms_flip@flip-vs-expired-vblank-interruptible.html
[119]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-4/igt@kms_flip@flip-vs-expired-vblank-interruptible.html
* igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-onoff:
- shard-lnl: [DMESG-WARN][120] ([Intel XE#7063]) -> [PASS][121] +1 other test pass
[120]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4447-6d7af7c5b6b121d5595b64be7dfcbf33be53287b/shard-lnl-7/igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-onoff.html
[121]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-3/igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-onoff.html
* igt@kms_hdr@invalid-hdr:
- shard-bmg: [SKIP][122] ([Intel XE#1503]) -> [PASS][123]
[122]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4447-6d7af7c5b6b121d5595b64be7dfcbf33be53287b/shard-bmg-9/igt@kms_hdr@invalid-hdr.html
[123]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-1/igt@kms_hdr@invalid-hdr.html
* igt@kms_pm_dc@dc6-psr:
- shard-lnl: [FAIL][124] ([Intel XE#718]) -> [PASS][125] +1 other test pass
[124]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4447-6d7af7c5b6b121d5595b64be7dfcbf33be53287b/shard-lnl-5/igt@kms_pm_dc@dc6-psr.html
[125]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-1/igt@kms_pm_dc@dc6-psr.html
* igt@kms_sharpness_filter@invalid-plane-with-filter@pipe-a-edp-1-invalid-plane-with-filter:
- shard-lnl: [DMESG-WARN][126] ([Intel XE#4537]) -> [PASS][127] +1 other test pass
[126]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4447-6d7af7c5b6b121d5595b64be7dfcbf33be53287b/shard-lnl-2/igt@kms_sharpness_filter@invalid-plane-with-filter@pipe-a-edp-1-invalid-plane-with-filter.html
[127]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-3/igt@kms_sharpness_filter@invalid-plane-with-filter@pipe-a-edp-1-invalid-plane-with-filter.html
* igt@xe_evict@evict-beng-mixed-many-threads-small:
- shard-bmg: [INCOMPLETE][128] ([Intel XE#6321]) -> [PASS][129]
[128]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4447-6d7af7c5b6b121d5595b64be7dfcbf33be53287b/shard-bmg-9/igt@xe_evict@evict-beng-mixed-many-threads-small.html
[129]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-3/igt@xe_evict@evict-beng-mixed-many-threads-small.html
* igt@xe_exec_system_allocator@pat-index-madvise-pat-idx-uc-single-vma:
- shard-lnl: [FAIL][130] ([Intel XE#5625]) -> [PASS][131]
[130]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4447-6d7af7c5b6b121d5595b64be7dfcbf33be53287b/shard-lnl-5/igt@xe_exec_system_allocator@pat-index-madvise-pat-idx-uc-single-vma.html
[131]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-5/igt@xe_exec_system_allocator@pat-index-madvise-pat-idx-uc-single-vma.html
* igt@xe_exec_system_allocator@threads-many-execqueues-new:
- shard-bmg: [ABORT][132] -> [PASS][133] +1 other test pass
[132]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4447-6d7af7c5b6b121d5595b64be7dfcbf33be53287b/shard-bmg-2/igt@xe_exec_system_allocator@threads-many-execqueues-new.html
[133]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-7/igt@xe_exec_system_allocator@threads-many-execqueues-new.html
* igt@xe_exec_system_allocator@threads-many-large-execqueues-mmap-file:
- shard-lnl: [DMESG-WARN][134] ([Intel XE#4537] / [Intel XE#7063]) -> [PASS][135]
[134]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4447-6d7af7c5b6b121d5595b64be7dfcbf33be53287b/shard-lnl-5/igt@xe_exec_system_allocator@threads-many-large-execqueues-mmap-file.html
[135]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-1/igt@xe_exec_system_allocator@threads-many-large-execqueues-mmap-file.html
* igt@xe_pm@s2idle-d3hot-basic-exec:
- shard-lnl: [ABORT][136] -> [PASS][137]
[136]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4447-6d7af7c5b6b121d5595b64be7dfcbf33be53287b/shard-lnl-7/igt@xe_pm@s2idle-d3hot-basic-exec.html
[137]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-lnl-2/igt@xe_pm@s2idle-d3hot-basic-exec.html
#### Warnings ####
* igt@kms_frontbuffer_tracking@fbc-1p-offscreen-pri-indfb-draw-blt:
- shard-bmg: [ABORT][138] -> [SKIP][139] ([Intel XE#4141])
[138]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4447-6d7af7c5b6b121d5595b64be7dfcbf33be53287b/shard-bmg-10/igt@kms_frontbuffer_tracking@fbc-1p-offscreen-pri-indfb-draw-blt.html
[139]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-9/igt@kms_frontbuffer_tracking@fbc-1p-offscreen-pri-indfb-draw-blt.html
* igt@kms_tiled_display@basic-test-pattern:
- shard-bmg: [FAIL][140] ([Intel XE#1729]) -> [SKIP][141] ([Intel XE#2426])
[140]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4447-6d7af7c5b6b121d5595b64be7dfcbf33be53287b/shard-bmg-10/igt@kms_tiled_display@basic-test-pattern.html
[141]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-1/igt@kms_tiled_display@basic-test-pattern.html
* igt@kms_tiled_display@basic-test-pattern-with-chamelium:
- shard-bmg: [SKIP][142] ([Intel XE#2426]) -> [SKIP][143] ([Intel XE#2509])
[142]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4447-6d7af7c5b6b121d5595b64be7dfcbf33be53287b/shard-bmg-9/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
[143]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/shard-bmg-4/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
[Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
[Intel XE#1127]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1127
[Intel XE#1178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1178
[Intel XE#1392]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1392
[Intel XE#1401]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1401
[Intel XE#1406]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1406
[Intel XE#1421]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1421
[Intel XE#1435]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1435
[Intel XE#1439]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1439
[Intel XE#1468]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1468
[Intel XE#1489]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1489
[Intel XE#1503]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1503
[Intel XE#1729]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1729
[Intel XE#1745]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1745
[Intel XE#2142]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2142
[Intel XE#2168]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2168
[Intel XE#2191]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2191
[Intel XE#2234]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2234
[Intel XE#2244]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2244
[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#2286]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2286
[Intel XE#2293]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2293
[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#2314]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2314
[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#2327]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2327
[Intel XE#2330]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2330
[Intel XE#2341]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2341
[Intel XE#2380]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2380
[Intel XE#2390]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2390
[Intel XE#2413]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2413
[Intel XE#2414]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2414
[Intel XE#2426]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2426
[Intel XE#2427]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2427
[Intel XE#2450]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2450
[Intel XE#2486]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2486
[Intel XE#2504]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2504
[Intel XE#2509]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2509
[Intel XE#2724]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2724
[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#2894]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2894
[Intel XE#301]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/301
[Intel XE#306]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/306
[Intel XE#307]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/307
[Intel XE#309]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/309
[Intel XE#3149]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3149
[Intel XE#330]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/330
[Intel XE#3304]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3304
[Intel XE#3414]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3414
[Intel XE#3432]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3432
[Intel XE#373]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/373
[Intel XE#3904]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3904
[Intel XE#4141]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4141
[Intel XE#4156]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4156
[Intel XE#4422]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4422
[Intel XE#4459]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4459
[Intel XE#4537]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4537
[Intel XE#4596]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4596
[Intel XE#4608]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4608
[Intel XE#4665]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4665
[Intel XE#4837]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4837
[Intel XE#4943]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4943
[Intel XE#5007]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5007
[Intel XE#5021]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5021
[Intel XE#5545]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5545
[Intel XE#5625]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5625
[Intel XE#584]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/584
[Intel XE#6054]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6054
[Intel XE#6321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6321
[Intel XE#6376]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6376
[Intel XE#6503]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6503
[Intel XE#651]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/651
[Intel XE#656]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/656
[Intel XE#6569]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6569
[Intel XE#6665]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6665
[Intel XE#6681]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6681
[Intel XE#6747]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6747
[Intel XE#6766]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6766
[Intel XE#6831]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6831
[Intel XE#6874]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6874
[Intel XE#688]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/688
[Intel XE#6901]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6901
[Intel XE#6912]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6912
[Intel XE#6953]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6953
[Intel XE#6964]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6964
[Intel XE#6968]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6968
[Intel XE#6974]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6974
[Intel XE#7059]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7059
[Intel XE#7061]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7061
[Intel XE#7063]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7063
[Intel XE#7084]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7084
[Intel XE#7136]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7136
[Intel XE#7138]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7138
[Intel XE#718]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/718
[Intel XE#836]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/836
[Intel XE#870]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/870
[Intel XE#944]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/944
Build changes
-------------
* IGT: IGT_8716 -> IGT_8717
* Linux: xe-4447-6d7af7c5b6b121d5595b64be7dfcbf33be53287b -> xe-pw-160006v4
IGT_8716: 8716
IGT_8717: 8717
xe-4447-6d7af7c5b6b121d5595b64be7dfcbf33be53287b: 6d7af7c5b6b121d5595b64be7dfcbf33be53287b
xe-pw-160006v4: 160006v4
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-160006v4/index.html
[-- Attachment #2: Type: text/html, Size: 50537 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v6 1/5] drm/xe: Make xe_ggtt_node offset relative to starting offset
2026-01-26 10:46 ` [PATCH v6 1/5] drm/xe: Make xe_ggtt_node offset relative to starting offset Maarten Lankhorst
@ 2026-01-26 21:01 ` Michal Wajdeczko
0 siblings, 0 replies; 15+ messages in thread
From: Michal Wajdeczko @ 2026-01-26 21:01 UTC (permalink / raw)
To: Maarten Lankhorst, intel-gfx, intel-xe
On 1/26/2026 11:46 AM, Maarten Lankhorst wrote:
> Fix all functions that use node->start to use xe_ggtt_node_addr,
> and add ggtt->start to node->start.
>
> This will make node shifting for SR-IOV VF a one-liner, instead of
> manually changing each GGTT node's base address.
>
> Also convert some uses of mutex_lock/unlock to mutex guards.
>
> Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
Reviewed-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
> ---
> Changes since last version:
> - xe_assert -> xe_tile_assert
> - remove extra null check
> - add guard(mutex) to commit message.
> ---
> drivers/gpu/drm/xe/xe_ggtt.c | 53 +++++++++++++++++++++---------------
> 1 file changed, 31 insertions(+), 22 deletions(-)
>
...
> @@ -1033,9 +1043,8 @@ static void xe_ggtt_assign_locked(struct xe_ggtt *ggtt, const struct drm_mm_node
> */
> void xe_ggtt_assign(const struct xe_ggtt_node *node, u16 vfid)
btw, we somehow missed to rename this one to xe_ggtt_node_assign(), but we could fix that later
> {> - mutex_lock(&node->ggtt->lock);
> - xe_ggtt_assign_locked(node->ggtt, &node->base, vfid);
> - mutex_unlock(&node->ggtt->lock);
> + guard(mutex)(&node->ggtt->lock);
> + xe_ggtt_assign_locked(node, vfid);
> }
>
> /**
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v6 2/5] drm/xe: Rewrite GGTT VF initialization
2026-01-26 10:46 ` [PATCH v6 2/5] drm/xe: Rewrite GGTT VF initialization Maarten Lankhorst
@ 2026-01-26 21:02 ` Michal Wajdeczko
0 siblings, 0 replies; 15+ messages in thread
From: Michal Wajdeczko @ 2026-01-26 21:02 UTC (permalink / raw)
To: Maarten Lankhorst, intel-gfx, intel-xe; +Cc: Matthew Brost
On 1/26/2026 11:46 AM, Maarten Lankhorst wrote:
> The previous code was using a complicated system with 2 balloons to
> set GGTT size and adjust GGTT offset. While it works, it's overly
> complicated.
>
> A better approach is to set the offset and size when initializing GGTT,
> this removes the need for adding balloons. The resize function only
> needs readjust ggtt->start to have GGTT at the new offset.
>
> This removes the need to manipulate the internals of xe_ggtt outside
> of xe_ggtt, and cleans up a lot of now unneeded code.
>
> Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
> Co-developed-by: Matthew Brost <matthew.brost@intel.com>
> ---
> Changelog:
> - Update comments and documentation.
> - Rework the flow of vf_get_ggtt_info().
> ---
> drivers/gpu/drm/xe/xe_device_types.h | 2 -
> drivers/gpu/drm/xe/xe_ggtt.c | 164 +++++----------------
> drivers/gpu/drm/xe/xe_ggtt.h | 5 +-
> drivers/gpu/drm/xe/xe_gt_sriov_vf.c | 37 +++--
> drivers/gpu/drm/xe/xe_tile_sriov_vf.c | 198 +-------------------------
> drivers/gpu/drm/xe/xe_tile_sriov_vf.h | 3 -
> 6 files changed, 64 insertions(+), 345 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
> index 34feef79fa4e7..0409fa98835e8 100644
> --- a/drivers/gpu/drm/xe/xe_device_types.h
> +++ b/drivers/gpu/drm/xe/xe_device_types.h
> @@ -228,8 +228,6 @@ struct xe_tile {
> struct xe_lmtt lmtt;
> } pf;
> struct {
> - /** @sriov.vf.ggtt_balloon: GGTT regions excluded from use. */
> - struct xe_ggtt_node *ggtt_balloon[2];
> /** @sriov.vf.self_config: VF configuration data */
> struct xe_tile_sriov_vf_selfconfig self_config;
> } vf;
> diff --git a/drivers/gpu/drm/xe/xe_ggtt.c b/drivers/gpu/drm/xe/xe_ggtt.c
> index 5c11df67b589e..fecbdd71cec5d 100644
> --- a/drivers/gpu/drm/xe/xe_ggtt.c
> +++ b/drivers/gpu/drm/xe/xe_ggtt.c
> @@ -70,8 +70,8 @@
> * struct xe_ggtt_node - A node in GGTT.
> *
> * This struct needs to be initialized (only-once) with xe_ggtt_node_init() before any node
> - * insertion, reservation, or 'ballooning'.
> - * It will, then, be finalized by either xe_ggtt_node_remove() or xe_ggtt_node_deballoon().
> + * insertion or reservation.
> + * It will, then, be finalized by xe_ggtt_node_remove().
> */
> struct xe_ggtt_node {
> /** @ggtt: Back pointer to xe_ggtt where this region will be inserted at */
> @@ -347,9 +347,15 @@ int xe_ggtt_init_early(struct xe_ggtt *ggtt)
> ggtt_start = wopcm;
> ggtt_size = (gsm_size / 8) * (u64)XE_PAGE_SIZE - ggtt_start;
> } else {
> - /* GGTT is expected to be 4GiB */
> - ggtt_start = wopcm;
> - ggtt_size = SZ_4G - ggtt_start;
> + ggtt_start = xe_tile_sriov_vf_ggtt_base(ggtt->tile);
> + ggtt_size = xe_tile_sriov_vf_ggtt(ggtt->tile);
> +
> + if (ggtt_start < wopcm || ggtt_start > GUC_GGTT_TOP ||
> + ggtt_size > GUC_GGTT_TOP - ggtt_start) {
nit: probably
ggtt_start + ggtt_size > GUC_GGTT_TOP
would be more easier understand, but yeah, that's still a plain math
> + xe_tile_err(ggtt->tile, "Invalid GGTT configuration: %#llx-%#llx\n",
> + ggtt_start, ggtt_start + ggtt_size - 1);
> + return -ERANGE;
> + }
> }
>
> ggtt->gsm = ggtt->tile->mmio.regs + SZ_8M;
> @@ -377,17 +383,7 @@ int xe_ggtt_init_early(struct xe_ggtt *ggtt)
> if (err)
> return err;
>
> - err = devm_add_action_or_reset(xe->drm.dev, dev_fini_ggtt, ggtt);
> - if (err)
> - return err;
> -
> - if (IS_SRIOV_VF(xe)) {
> - err = xe_tile_sriov_vf_prepare_ggtt(ggtt->tile);
> - if (err)
> - return err;
> - }
> -
> - return 0;
> + return devm_add_action_or_reset(xe->drm.dev, dev_fini_ggtt, ggtt);
> }
> ALLOW_ERROR_INJECTION(xe_ggtt_init_early, ERRNO); /* See xe_pci_probe() */
>
> @@ -538,120 +534,27 @@ static void xe_ggtt_invalidate(struct xe_ggtt *ggtt)
> ggtt_invalidate_gt_tlb(ggtt->tile->media_gt);
> }
>
> -static void xe_ggtt_dump_node(struct xe_ggtt *ggtt,
> - const struct drm_mm_node *node, const char *description)
> -{
> - char buf[10];
> -
> - if (IS_ENABLED(CONFIG_DRM_XE_DEBUG)) {
> - string_get_size(node->size, 1, STRING_UNITS_2, buf, sizeof(buf));
> - xe_tile_dbg(ggtt->tile, "GGTT %#llx-%#llx (%s) %s\n",
> - node->start, node->start + node->size, buf, description);
> - }
> -}
> -
> -/**
> - * xe_ggtt_node_insert_balloon_locked - prevent allocation of specified GGTT addresses
> - * @node: the &xe_ggtt_node to hold reserved GGTT node
> - * @start: the starting GGTT address of the reserved region
> - * @end: then end GGTT address of the reserved region
> - *
> - * To be used in cases where ggtt->lock is already taken.
> - * Use xe_ggtt_node_remove_balloon_locked() to release a reserved GGTT node.
> - *
> - * Return: 0 on success or a negative error code on failure.
> - */
> -int xe_ggtt_node_insert_balloon_locked(struct xe_ggtt_node *node, u64 start, u64 end)
> -{
> - struct xe_ggtt *ggtt = node->ggtt;
> - int err;
> -
> - xe_tile_assert(ggtt->tile, start < end);
> - xe_tile_assert(ggtt->tile, IS_ALIGNED(start, XE_PAGE_SIZE));
> - xe_tile_assert(ggtt->tile, IS_ALIGNED(end, XE_PAGE_SIZE));
> - xe_tile_assert(ggtt->tile, !drm_mm_node_allocated(&node->base));
> - xe_tile_assert(ggtt->tile, start >= ggtt->start);
> - lockdep_assert_held(&ggtt->lock);
> -
> - node->base.color = 0;
> - node->base.start = start - ggtt->start;
> - node->base.size = end - start;
> -
> - err = drm_mm_reserve_node(&ggtt->mm, &node->base);
> -
> - if (xe_tile_WARN(ggtt->tile, err, "Failed to balloon GGTT %#llx-%#llx (%pe)\n",
> - xe_ggtt_node_addr(node), xe_ggtt_node_addr(node) + node->base.size, ERR_PTR(err)))
> - return err;
> -
> - xe_ggtt_dump_node(ggtt, &node->base, "balloon");
> - return 0;
> -}
> -
> /**
> - * xe_ggtt_node_remove_balloon_locked - release a reserved GGTT region
> - * @node: the &xe_ggtt_node with reserved GGTT region
> - *
> - * To be used in cases where ggtt->lock is already taken.
> - * See xe_ggtt_node_insert_balloon_locked() for details.
> - */
> -void xe_ggtt_node_remove_balloon_locked(struct xe_ggtt_node *node)
> -{
> - if (!xe_ggtt_node_allocated(node))
> - return;
> -
> - lockdep_assert_held(&node->ggtt->lock);
> -
> - xe_ggtt_dump_node(node->ggtt, &node->base, "remove-balloon");
> -
> - drm_mm_remove_node(&node->base);
> -}
> -
> -static void xe_ggtt_assert_fit(struct xe_ggtt *ggtt, u64 start, u64 size)
> -{
> - struct xe_tile *tile = ggtt->tile;
> -
> - xe_tile_assert(tile, start >= ggtt->start);
> - xe_tile_assert(tile, start + size <= ggtt->start + ggtt->size);
> -}
> -
> -/**
> - * xe_ggtt_shift_nodes_locked - Shift GGTT nodes to adjust for a change in usable address range.
> + * xe_ggtt_shift_nodes() - Shift GGTT nodes to adjust for a change in usable address range.
> * @ggtt: the &xe_ggtt struct instance
> - * @shift: change to the location of area provisioned for current VF
> + * @new_start: new location of area provisioned for current VF
> + *
> + * Ensure that all struct &xe_ggtt_node are moved to the @new_start base address
> + * by changing the base offset of the GGTT.
> *
> - * This function moves all nodes from the GGTT VM, to a temp list. These nodes are expected
> - * to represent allocations in range formerly assigned to current VF, before the range changed.
> - * When the GGTT VM is completely clear of any nodes, they are re-added with shifted offsets.
> + * This function may be called multiple times during recovery, but if
> + * @new_start is unchanged from the current base, it's a noop.
> *
> - * The function has no ability of failing - because it shifts existing nodes, without
> - * any additional processing. If the nodes were successfully existing at the old address,
> - * they will do the same at the new one. A fail inside this function would indicate that
> - * the list of nodes was either already damaged, or that the shift brings the address range
> - * outside of valid bounds. Both cases justify an assert rather than error code.
> + * @new_start should be a value between xe_wopcm_size() and #GUC_GGTT_TOP.
nit: shouldn't we add a note why we believe that WRITE_ONCE is sufficient and we don't need lock anymore?
I assume it's because after this call we will always replay/restart all submissions, which will query each node for its new address using READ_ONCE, but maybe I'm wrong
> */
> -void xe_ggtt_shift_nodes_locked(struct xe_ggtt *ggtt, s64 shift)
> +void xe_ggtt_shift_nodes(struct xe_ggtt *ggtt, u64 new_start)
> {
> - struct xe_tile *tile __maybe_unused = ggtt->tile;
> - struct drm_mm_node *node, *tmpn;
> - LIST_HEAD(temp_list_head);
> -
> - lockdep_assert_held(&ggtt->lock);
> + guard(mutex)(&ggtt->lock);
>
> - if (IS_ENABLED(CONFIG_DRM_XE_DEBUG))
> - drm_mm_for_each_node_safe(node, tmpn, &ggtt->mm)
> - xe_ggtt_assert_fit(ggtt, node->start + shift, node->size);
> + xe_tile_assert(ggtt->tile, new_start >= xe_wopcm_size(tile_to_xe(ggtt->tile)));
> + xe_tile_assert(ggtt->tile, new_start + ggtt->size <= GUC_GGTT_TOP);
>
> - drm_mm_for_each_node_safe(node, tmpn, &ggtt->mm) {
> - drm_mm_remove_node(node);
> - list_add(&node->node_list, &temp_list_head);
> - }
> -
> - list_for_each_entry_safe(node, tmpn, &temp_list_head, node_list) {
> - list_del(&node->node_list);
> - node->start += shift;
> - drm_mm_reserve_node(&ggtt->mm, node);
> - xe_tile_assert(tile, drm_mm_node_allocated(node));
> - }
nit: maybe small comment?
/* pairs with READ_ONCE in xe_ggtt_node_addr() */
> + WRITE_ONCE(ggtt->start, new_start);
> }
>
> static int xe_ggtt_node_insert_locked(struct xe_ggtt_node *node,
> @@ -692,12 +595,8 @@ int xe_ggtt_node_insert(struct xe_ggtt_node *node, u32 size, u32 align)
> *
> * This function will allocate the struct %xe_ggtt_node and return its pointer.
> * This struct will then be freed after the node removal upon xe_ggtt_node_remove()
> - * or xe_ggtt_node_remove_balloon_locked().
> - *
> - * Having %xe_ggtt_node struct allocated doesn't mean that the node is already
> - * allocated in GGTT. Only xe_ggtt_node_insert(), allocation through
> - * xe_ggtt_node_insert_transform(), or xe_ggtt_node_insert_balloon_locked() will ensure the node is inserted or reserved
> - * in GGTT.
> + * Having %xe_ggtt_node struct allocated doesn't mean that the node is already allocated
> + * in GGTT. Only xe_ggtt_node_insert() will ensure the node is inserted or reserved in GGTT.
> *
> * Return: A pointer to %xe_ggtt_node struct on success. An ERR_PTR otherwise.
> **/
> @@ -718,9 +617,9 @@ struct xe_ggtt_node *xe_ggtt_node_init(struct xe_ggtt *ggtt)
> * xe_ggtt_node_fini - Forcebly finalize %xe_ggtt_node struct
> * @node: the &xe_ggtt_node to be freed
> *
> - * If anything went wrong with either xe_ggtt_node_insert(), xe_ggtt_node_insert_locked(),
> - * or xe_ggtt_node_insert_balloon_locked(); and this @node is not going to be reused, then,
> - * this function needs to be called to free the %xe_ggtt_node struct
> + * If anything went wrong with either xe_ggtt_node_insert() and this @node is
> + * not going to be reused, then this function needs to be called to free the
> + * %xe_ggtt_node struct
> **/
> void xe_ggtt_node_fini(struct xe_ggtt_node *node)
> {
> @@ -1220,7 +1119,8 @@ u64 xe_ggtt_read_pte(struct xe_ggtt *ggtt, u64 offset)
> */
> u64 xe_ggtt_node_addr(const struct xe_ggtt_node *node)
> {
> - return node->base.start + node->ggtt->start;
> + /* pairs with WRITE_ONCE in xe_ggtt_shift_nodes() */
> + return node->base.start + READ_ONCE(node->ggtt->start);
> }
>
> /**
> diff --git a/drivers/gpu/drm/xe/xe_ggtt.h b/drivers/gpu/drm/xe/xe_ggtt.h
> index 70d5e07ac4b66..49ea8e7ecc105 100644
> --- a/drivers/gpu/drm/xe/xe_ggtt.h
> +++ b/drivers/gpu/drm/xe/xe_ggtt.h
> @@ -19,10 +19,7 @@ int xe_ggtt_init(struct xe_ggtt *ggtt);
>
> struct xe_ggtt_node *xe_ggtt_node_init(struct xe_ggtt *ggtt);
> void xe_ggtt_node_fini(struct xe_ggtt_node *node);
> -int xe_ggtt_node_insert_balloon_locked(struct xe_ggtt_node *node,
> - u64 start, u64 size);
> -void xe_ggtt_node_remove_balloon_locked(struct xe_ggtt_node *node);
> -void xe_ggtt_shift_nodes_locked(struct xe_ggtt *ggtt, s64 shift);
> +void xe_ggtt_shift_nodes(struct xe_ggtt *ggtt, u64 new_base);
> u64 xe_ggtt_start(struct xe_ggtt *ggtt);
> u64 xe_ggtt_size(struct xe_ggtt *ggtt);
>
> diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_vf.c b/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
> index 30e8c2cf5f09a..fabefb0469d0c 100644
> --- a/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
> +++ b/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
> @@ -488,7 +488,6 @@ u32 xe_gt_sriov_vf_gmdid(struct xe_gt *gt)
> static int vf_get_ggtt_info(struct xe_gt *gt)
> {
> struct xe_tile *tile = gt_to_tile(gt);
> - struct xe_ggtt *ggtt = tile->mem.ggtt;
> struct xe_guc *guc = >->uc.guc;
> u64 start, size, ggtt_size;
> s64 shift;
> @@ -496,8 +495,6 @@ static int vf_get_ggtt_info(struct xe_gt *gt)
>
> xe_gt_assert(gt, IS_SRIOV_VF(gt_to_xe(gt)));
>
> - guard(mutex)(&ggtt->lock);
> -
> err = guc_action_query_single_klv64(guc, GUC_KLV_VF_CFG_GGTT_START_KEY, &start);
> if (unlikely(err))
> return err;
> @@ -510,7 +507,20 @@ static int vf_get_ggtt_info(struct xe_gt *gt)
> return -ENODATA;
>
> ggtt_size = xe_tile_sriov_vf_ggtt(tile);
> - if (ggtt_size && ggtt_size != size) {
> + if (!ggtt_size) {
> + /*
> + * This function is called once during xe_guc_init_noalloc(),
> + * at which point ggtt_size = 0 and we have to initialize everything,
> + * and GGTT is not yet initialized.
> + *
> + * Return early as there's nothing to fixup.'
^
nit: stray '
> + */
> + xe_tile_sriov_vf_ggtt_store(tile, size);
> + xe_tile_sriov_vf_ggtt_base_store(tile, start);
> + return 0;
> + }
> +
> + if (ggtt_size != size) {
> xe_gt_sriov_err(gt, "Unexpected GGTT reassignment: %lluK != %lluK\n",
> size / SZ_1K, ggtt_size / SZ_1K);
> return -EREMCHG;
> @@ -521,13 +531,20 @@ static int vf_get_ggtt_info(struct xe_gt *gt)
>
> shift = start - (s64)xe_tile_sriov_vf_ggtt_base(tile);
nit: do we really need local var for this? it's used only in log
> xe_tile_sriov_vf_ggtt_base_store(tile, start);
> - xe_tile_sriov_vf_ggtt_store(tile, size);
>
> - if (shift && shift != start) {
> - xe_gt_sriov_info(gt, "Shifting GGTT base by %lld to 0x%016llx\n",
> - shift, start);
> - xe_tile_sriov_vf_fixup_ggtt_nodes_locked(gt_to_tile(gt), shift);
> - }
> + /*
> + * This function can be called repeatedly from post migration fixups,
> + * at which point we inform the GGTT of the new base address.
> + * xe_ggtt_shift_nodes() may be called multiple times for each migration,
> + * but will be a noop if the base is unchanged.
> + *
> + * Since we're not holding a lock, the shift value may be
> + * calculated incorrectly.
> + * This is only used for a debug print so it's harmless.
hmm, and maybe we don't need this 'shift' at all?
for debug it should be sufficient to log only new 'start'
and if really needed, any 'shift' value can be calculated as part of the post-processing
> + */
> + xe_gt_sriov_info(gt, "Shifting GGTT base by %lld to 0x%016llx\n",
> + shift, start);
> + xe_ggtt_shift_nodes(tile->mem.ggtt, start);
>
> if (xe_sriov_vf_migration_supported(gt_to_xe(gt))) {
> WRITE_ONCE(gt->sriov.vf.migration.ggtt_need_fixes, false);
> diff --git a/drivers/gpu/drm/xe/xe_tile_sriov_vf.c b/drivers/gpu/drm/xe/xe_tile_sriov_vf.c
> index c9bac2cfdd044..24293521e0904 100644
> --- a/drivers/gpu/drm/xe/xe_tile_sriov_vf.c
> +++ b/drivers/gpu/drm/xe/xe_tile_sriov_vf.c
> @@ -14,173 +14,12 @@
> #include "xe_tile_sriov_vf.h"
> #include "xe_wopcm.h"
>
> -static int vf_init_ggtt_balloons(struct xe_tile *tile)
> -{
> - struct xe_ggtt *ggtt = tile->mem.ggtt;
> -
> - xe_tile_assert(tile, IS_SRIOV_VF(tile_to_xe(tile)));
> -
> - tile->sriov.vf.ggtt_balloon[0] = xe_ggtt_node_init(ggtt);
> - if (IS_ERR(tile->sriov.vf.ggtt_balloon[0]))
> - return PTR_ERR(tile->sriov.vf.ggtt_balloon[0]);
> -
> - tile->sriov.vf.ggtt_balloon[1] = xe_ggtt_node_init(ggtt);
> - if (IS_ERR(tile->sriov.vf.ggtt_balloon[1])) {
> - xe_ggtt_node_fini(tile->sriov.vf.ggtt_balloon[0]);
> - return PTR_ERR(tile->sriov.vf.ggtt_balloon[1]);
> - }
> -
> - return 0;
> -}
> -
> -/**
> - * xe_tile_sriov_vf_balloon_ggtt_locked - Insert balloon nodes to limit used GGTT address range.
> - * @tile: the &xe_tile struct instance
> - *
> - * Return: 0 on success or a negative error code on failure.
> - */
> -static int xe_tile_sriov_vf_balloon_ggtt_locked(struct xe_tile *tile)
> -{
> - u64 ggtt_base = tile->sriov.vf.self_config.ggtt_base;
> - u64 ggtt_size = tile->sriov.vf.self_config.ggtt_size;
> - struct xe_device *xe = tile_to_xe(tile);
> - u64 wopcm = xe_wopcm_size(xe);
> - u64 start, end;
> - int err;
> -
> - xe_tile_assert(tile, IS_SRIOV_VF(xe));
> - xe_tile_assert(tile, ggtt_size);
> - lockdep_assert_held(&tile->mem.ggtt->lock);
> -
> - /*
> - * VF can only use part of the GGTT as allocated by the PF:
> - *
> - * WOPCM GUC_GGTT_TOP
> - * |<------------ Total GGTT size ------------------>|
> - *
> - * VF GGTT base -->|<- size ->|
> - *
> - * +--------------------+----------+-----------------+
> - * |////////////////////| block |\\\\\\\\\\\\\\\\\|
> - * +--------------------+----------+-----------------+
> - *
> - * |<--- balloon[0] --->|<-- VF -->|<-- balloon[1] ->|
> - */
> -
> - if (ggtt_base < wopcm || ggtt_base > GUC_GGTT_TOP ||
> - ggtt_size > GUC_GGTT_TOP - ggtt_base) {
> - xe_sriov_err(xe, "tile%u: Invalid GGTT configuration: %#llx-%#llx\n",
> - tile->id, ggtt_base, ggtt_base + ggtt_size - 1);
> - return -ERANGE;
> - }
> -
> - start = wopcm;
> - end = ggtt_base;
> - if (end != start) {
> - err = xe_ggtt_node_insert_balloon_locked(tile->sriov.vf.ggtt_balloon[0],
> - start, end);
> - if (err)
> - return err;
> - }
> -
> - start = ggtt_base + ggtt_size;
> - end = GUC_GGTT_TOP;
> - if (end != start) {
> - err = xe_ggtt_node_insert_balloon_locked(tile->sriov.vf.ggtt_balloon[1],
> - start, end);
> - if (err) {
> - xe_ggtt_node_remove_balloon_locked(tile->sriov.vf.ggtt_balloon[0]);
> - return err;
> - }
> - }
> -
> - return 0;
> -}
> -
> -static int vf_balloon_ggtt(struct xe_tile *tile)
> -{
> - struct xe_ggtt *ggtt = tile->mem.ggtt;
> - int err;
> -
> - mutex_lock(&ggtt->lock);
> - err = xe_tile_sriov_vf_balloon_ggtt_locked(tile);
> - mutex_unlock(&ggtt->lock);
> -
> - return err;
> -}
> -
> -/**
> - * xe_tile_sriov_vf_deballoon_ggtt_locked - Remove balloon nodes.
> - * @tile: the &xe_tile struct instance
> - */
> -void xe_tile_sriov_vf_deballoon_ggtt_locked(struct xe_tile *tile)
> -{
> - xe_tile_assert(tile, IS_SRIOV_VF(tile_to_xe(tile)));
> -
> - xe_ggtt_node_remove_balloon_locked(tile->sriov.vf.ggtt_balloon[1]);
> - xe_ggtt_node_remove_balloon_locked(tile->sriov.vf.ggtt_balloon[0]);
> -}
> -
> -static void vf_deballoon_ggtt(struct xe_tile *tile)
> -{
> - mutex_lock(&tile->mem.ggtt->lock);
> - xe_tile_sriov_vf_deballoon_ggtt_locked(tile);
> - mutex_unlock(&tile->mem.ggtt->lock);
> -}
> -
> -static void vf_fini_ggtt_balloons(struct xe_tile *tile)
> -{
> - xe_tile_assert(tile, IS_SRIOV_VF(tile_to_xe(tile)));
> -
> - xe_ggtt_node_fini(tile->sriov.vf.ggtt_balloon[1]);
> - xe_ggtt_node_fini(tile->sriov.vf.ggtt_balloon[0]);
> -}
> -
> -static void cleanup_ggtt(struct drm_device *drm, void *arg)
> -{
> - struct xe_tile *tile = arg;
> -
> - vf_deballoon_ggtt(tile);
> - vf_fini_ggtt_balloons(tile);
> -}
> -
> -/**
> - * xe_tile_sriov_vf_prepare_ggtt - Prepare a VF's GGTT configuration.
> - * @tile: the &xe_tile
> - *
> - * This function is for VF use only.
> - *
> - * Return: 0 on success or a negative error code on failure.
> - */
> -int xe_tile_sriov_vf_prepare_ggtt(struct xe_tile *tile)
> -{
> - struct xe_device *xe = tile_to_xe(tile);
> - int err;
> -
> - err = vf_init_ggtt_balloons(tile);
> - if (err)
> - return err;
> -
> - err = vf_balloon_ggtt(tile);
> - if (err) {
> - vf_fini_ggtt_balloons(tile);
> - return err;
> - }
> -
> - return drmm_add_action_or_reset(&xe->drm, cleanup_ggtt, tile);
> -}
> -
> /**
> * DOC: GGTT nodes shifting during VF post-migration recovery
> *
> * The first fixup applied to the VF KMD structures as part of post-migration
> * recovery is shifting nodes within &xe_ggtt instance. The nodes are moved
> * from range previously assigned to this VF, into newly provisioned area.
> - * The changes include balloons, which are resized accordingly.
> - *
> - * The balloon nodes are there to eliminate unavailable ranges from use: one
> - * reserves the GGTT area below the range for current VF, and another one
> - * reserves area above.
> *
> * Below is a GGTT layout of example VF, with a certain address range assigned to
> * said VF, and inaccessible areas above and below:
> @@ -198,10 +37,6 @@ int xe_tile_sriov_vf_prepare_ggtt(struct xe_tile *tile)
> *
> * |<------- inaccessible for VF ------->|<VF owned>|<-- inaccessible for VF ->|
> *
> - * GGTT nodes used for tracking allocations:
> - *
> - * |<---------- balloon ------------>|<- nodes->|<----- balloon ------>|
> - *
> * After the migration, GGTT area assigned to the VF might have shifted, either
> * to lower or to higher address. But we expect the total size and extra areas to
> * be identical, as migration can only happen between matching platforms.
> @@ -219,37 +54,12 @@ int xe_tile_sriov_vf_prepare_ggtt(struct xe_tile *tile)
> * So the VF has a new slice of GGTT assigned, and during migration process, the
> * memory content was copied to that new area. But the &xe_ggtt nodes are still
> * tracking allocations using the old addresses. The nodes within VF owned area
> - * have to be shifted, and balloon nodes need to be resized to properly mask out
> - * areas not owned by the VF.
> - *
> - * Fixed &xe_ggtt nodes used for tracking allocations:
> - *
> - * |<------ balloon ------>|<- nodes->|<----------- balloon ----------->|
> + * have to be shifted, and the start offset for GGTT adjusted.
> *
> - * Due to use of GPU profiles, we do not expect the old and new GGTT ares to
> + * Due to use of GPU profiles, we do not expect the old and new GGTT areas to
> * overlap; but our node shifting will fix addresses properly regardless.
> */
>
> -/**
> - * xe_tile_sriov_vf_fixup_ggtt_nodes_locked - Shift GGTT allocations to match assigned range.
> - * @tile: the &xe_tile struct instance
> - * @shift: the shift value
> - *
> - * Since Global GTT is not virtualized, each VF has an assigned range
> - * within the global space. This range might have changed during migration,
> - * which requires all memory addresses pointing to GGTT to be shifted.
> - */
> -void xe_tile_sriov_vf_fixup_ggtt_nodes_locked(struct xe_tile *tile, s64 shift)
> -{
> - struct xe_ggtt *ggtt = tile->mem.ggtt;
> -
> - lockdep_assert_held(&ggtt->lock);
> -
> - xe_tile_sriov_vf_deballoon_ggtt_locked(tile);
> - xe_ggtt_shift_nodes_locked(ggtt, shift);
> - xe_tile_sriov_vf_balloon_ggtt_locked(tile);
> -}
> -
> /**
> * xe_tile_sriov_vf_lmem - VF LMEM configuration.
> * @tile: the &xe_tile
> @@ -330,7 +140,7 @@ u64 xe_tile_sriov_vf_ggtt_base(struct xe_tile *tile)
>
> xe_tile_assert(tile, IS_SRIOV_VF(tile_to_xe(tile)));
>
> - return config->ggtt_base;
> + return READ_ONCE(config->ggtt_base);
> }
>
> /**
> @@ -346,5 +156,5 @@ void xe_tile_sriov_vf_ggtt_base_store(struct xe_tile *tile, u64 ggtt_base)
>
> xe_tile_assert(tile, IS_SRIOV_VF(tile_to_xe(tile)));
>
> - config->ggtt_base = ggtt_base;
> + WRITE_ONCE(config->ggtt_base, ggtt_base);
> }
> diff --git a/drivers/gpu/drm/xe/xe_tile_sriov_vf.h b/drivers/gpu/drm/xe/xe_tile_sriov_vf.h
> index 749f41504883c..f2bbc4fc57347 100644
> --- a/drivers/gpu/drm/xe/xe_tile_sriov_vf.h
> +++ b/drivers/gpu/drm/xe/xe_tile_sriov_vf.h
> @@ -10,9 +10,6 @@
>
> struct xe_tile;
>
> -int xe_tile_sriov_vf_prepare_ggtt(struct xe_tile *tile);
> -void xe_tile_sriov_vf_deballoon_ggtt_locked(struct xe_tile *tile);
> -void xe_tile_sriov_vf_fixup_ggtt_nodes_locked(struct xe_tile *tile, s64 shift);
> u64 xe_tile_sriov_vf_ggtt(struct xe_tile *tile);
> void xe_tile_sriov_vf_ggtt_store(struct xe_tile *tile, u64 ggtt_size);
> u64 xe_tile_sriov_vf_ggtt_base(struct xe_tile *tile);
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v6 3/5] drm/xe: Move struct xe_ggtt to xe_ggtt.c
2026-01-26 10:46 ` [PATCH v6 3/5] drm/xe: Move struct xe_ggtt to xe_ggtt.c Maarten Lankhorst
@ 2026-01-26 21:06 ` Michal Wajdeczko
0 siblings, 0 replies; 15+ messages in thread
From: Michal Wajdeczko @ 2026-01-26 21:06 UTC (permalink / raw)
To: Maarten Lankhorst, intel-gfx, intel-xe; +Cc: Maarten Lankhorst, Matthew Brost
On 1/26/2026 11:46 AM, Maarten Lankhorst wrote:
> From: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
>
> No users left outside of xe_ggtt.c, so we can make the struct private.
>
> This prevents us from accidentally touching it before init.
>
> Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> Reviewed-by: Matthew Brost <matthew.brost@intel.com>
> Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
still double s-o-b, but code is fine,
Reviewed-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
> ---
...
>
> typedef void (*xe_ggtt_set_pte_fn)(struct xe_ggtt *ggtt, u64 addr, u64 pte);
> typedef void (*xe_ggtt_transform_cb)(struct xe_ggtt *ggtt,
> struct xe_ggtt_node *node,
> u64 pte_flags,
> xe_ggtt_set_pte_fn set_pte, void *arg);
nit: I hope one day we can get rid of these typedefs...
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v6 4/5] drm/xe: Make xe_ggtt_node_insert return a node
2026-01-26 10:46 ` [PATCH v6 4/5] drm/xe: Make xe_ggtt_node_insert return a node Maarten Lankhorst
@ 2026-01-26 21:07 ` Michal Wajdeczko
0 siblings, 0 replies; 15+ messages in thread
From: Michal Wajdeczko @ 2026-01-26 21:07 UTC (permalink / raw)
To: Maarten Lankhorst, intel-gfx, intel-xe; +Cc: Matthew Brost
On 1/26/2026 11:46 AM, Maarten Lankhorst wrote:
> This extra step is easier to handle inside xe_ggtt.c and makes
> xe_ggtt_node_allocated a simple null check instead, as the intermediate
> state 'allocated but not inserted' is no longer used.
>
> Privatize xe_ggtt_node_fini() and init() as they're no longer used
> outside of xe_ggtt.c
>
> Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
> Reviewed-by: Matthew Brost <matthew.brost@intel.com> #v1
Reviewed-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
with one nit below
> ---
> Changelog:
> - rename xe_ggtt_node_insert(,_transform) to
> xe_ggtt_insert_node(,_transform)
> - remove xe prefix from ggtt_node_init/fini()
> - Update xe_ggtt_node doc to point to the correct
> allocation and removal functions
> - Use guard in xe_ggtt_insert_node().
> ---
...
> @@ -669,16 +637,31 @@ struct xe_ggtt_node *xe_ggtt_node_init(struct xe_ggtt *ggtt)
> }
>
> /**
> - * xe_ggtt_node_fini - Forcebly finalize %xe_ggtt_node struct
> - * @node: the &xe_ggtt_node to be freed
> + * xe_ggtt_insert_node - Insert a &xe_ggtt_node into the GGTT
> + * @ggtt: the @ggtt into which the node should be inserted.
@ggtt: the &xe_ggtt into which new node should be inserted
> + * @size: size of the node
> + * @align: alignment constrain of the node
> *
> - * If anything went wrong with either xe_ggtt_node_insert() and this @node is
> - * not going to be reused, then this function needs to be called to free the
> - * %xe_ggtt_node struct
> - **/
> -void xe_ggtt_node_fini(struct xe_ggtt_node *node)
> + * Return: &xe_ggtt_node on success or a ERR_PTR on failure.
> + */
> +struct xe_ggtt_node *xe_ggtt_insert_node(struct xe_ggtt *ggtt, u32 size, u32 align)
> {
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v6 5/5] drm/xe: Remove xe_ggtt_node_allocated
2026-01-26 10:46 ` [PATCH v6 5/5] drm/xe: Remove xe_ggtt_node_allocated Maarten Lankhorst
@ 2026-01-26 21:13 ` Michal Wajdeczko
0 siblings, 0 replies; 15+ messages in thread
From: Michal Wajdeczko @ 2026-01-26 21:13 UTC (permalink / raw)
To: Maarten Lankhorst, intel-gfx, intel-xe
On 1/26/2026 11:46 AM, Maarten Lankhorst wrote:
> With the intermediate state gone, no longer useful. Just check against
> NULL where needed.
>
> Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
> ---
> drivers/gpu/drm/xe/display/xe_fb_pin.c | 3 +--
> drivers/gpu/drm/xe/xe_ggtt.c | 17 -----------------
> drivers/gpu/drm/xe/xe_ggtt.h | 1 -
> drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c | 12 ++++++------
> 4 files changed, 7 insertions(+), 26 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/display/xe_fb_pin.c b/drivers/gpu/drm/xe/display/xe_fb_pin.c
> index 5ff583699325c..e1d29b6ba043e 100644
> --- a/drivers/gpu/drm/xe/display/xe_fb_pin.c
> +++ b/drivers/gpu/drm/xe/display/xe_fb_pin.c
> @@ -352,8 +352,7 @@ static void __xe_unpin_fb_vma(struct i915_vma *vma)
>
> if (vma->dpt)
> xe_bo_unpin_map_no_vm(vma->dpt);
> - else if (!xe_ggtt_node_allocated(vma->bo->ggtt_node[tile_id]) ||
> - vma->bo->ggtt_node[tile_id] != vma->node)
> + else if (vma->bo->ggtt_node[tile_id] != vma->node)
this isn't 1:1 to what the commit message says, can you explain why?
> xe_ggtt_node_remove(vma->node, false);
>
> ttm_bo_reserve(&vma->bo->ttm, false, false, NULL);
^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2026-01-26 21:13 UTC | newest]
Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-01-26 10:45 [PATCH v6 0/5] drm/xe: Privatize struct xe_ggtt Maarten Lankhorst
2026-01-26 10:46 ` [PATCH v6 1/5] drm/xe: Make xe_ggtt_node offset relative to starting offset Maarten Lankhorst
2026-01-26 21:01 ` Michal Wajdeczko
2026-01-26 10:46 ` [PATCH v6 2/5] drm/xe: Rewrite GGTT VF initialization Maarten Lankhorst
2026-01-26 21:02 ` Michal Wajdeczko
2026-01-26 10:46 ` [PATCH v6 3/5] drm/xe: Move struct xe_ggtt to xe_ggtt.c Maarten Lankhorst
2026-01-26 21:06 ` Michal Wajdeczko
2026-01-26 10:46 ` [PATCH v6 4/5] drm/xe: Make xe_ggtt_node_insert return a node Maarten Lankhorst
2026-01-26 21:07 ` Michal Wajdeczko
2026-01-26 10:46 ` [PATCH v6 5/5] drm/xe: Remove xe_ggtt_node_allocated Maarten Lankhorst
2026-01-26 21:13 ` Michal Wajdeczko
2026-01-26 10:52 ` ✗ CI.checkpatch: warning for drm/xe: Privatize struct xe_ggtt. (rev4) Patchwork
2026-01-26 10:53 ` ✓ CI.KUnit: success " Patchwork
2026-01-26 11:46 ` ✗ Xe.CI.BAT: failure " Patchwork
2026-01-26 13:34 ` ✗ Xe.CI.Full: " Patchwork
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox