* [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
` (6 more replies)
0 siblings, 7 replies; 13+ 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] 13+ 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
` (5 subsequent siblings)
6 siblings, 1 reply; 13+ 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] 13+ 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
` (4 subsequent siblings)
6 siblings, 1 reply; 13+ 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] 13+ 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
` (3 subsequent siblings)
6 siblings, 1 reply; 13+ 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] 13+ 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
` (2 subsequent siblings)
6 siblings, 1 reply; 13+ 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] 13+ 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 14:26 ` ✓ i915.CI.BAT: success for drm/xe: Privatize struct xe_ggtt Patchwork
2026-01-26 18:16 ` ✗ i915.CI.Full: failure " Patchwork
6 siblings, 1 reply; 13+ 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] 13+ messages in thread
* ✓ i915.CI.BAT: success for drm/xe: Privatize struct xe_ggtt.
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 14:26 ` Patchwork
2026-01-26 18:16 ` ✗ i915.CI.Full: failure " Patchwork
6 siblings, 0 replies; 13+ messages in thread
From: Patchwork @ 2026-01-26 14:26 UTC (permalink / raw)
To: Maarten Lankhorst; +Cc: intel-gfx
[-- Attachment #1: Type: text/plain, Size: 2837 bytes --]
== Series Details ==
Series: drm/xe: Privatize struct xe_ggtt.
URL : https://patchwork.freedesktop.org/series/160638/
State : success
== Summary ==
CI Bug Log - changes from CI_DRM_17884 -> Patchwork_160638v1
====================================================
Summary
-------
**SUCCESS**
No regressions found.
External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/index.html
Participating hosts (43 -> 40)
------------------------------
Missing (3): bat-dg2-13 fi-snb-2520m bat-adls-6
Known issues
------------
Here are the changes found in Patchwork_160638v1 that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@i915_selftest@live@workarounds:
- bat-dg2-14: [PASS][1] -> [DMESG-FAIL][2] ([i915#12061]) +1 other test dmesg-fail
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/bat-dg2-14/igt@i915_selftest@live@workarounds.html
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/bat-dg2-14/igt@i915_selftest@live@workarounds.html
#### Possible fixes ####
* igt@i915_selftest@live@workarounds:
- bat-arls-5: [DMESG-FAIL][3] ([i915#12061]) -> [PASS][4] +1 other test pass
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/bat-arls-5/igt@i915_selftest@live@workarounds.html
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/bat-arls-5/igt@i915_selftest@live@workarounds.html
#### Warnings ####
* igt@i915_selftest@live:
- bat-atsm-1: [DMESG-FAIL][5] ([i915#12061] / [i915#13929]) -> [DMESG-FAIL][6] ([i915#12061] / [i915#14204])
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/bat-atsm-1/igt@i915_selftest@live.html
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/bat-atsm-1/igt@i915_selftest@live.html
* igt@i915_selftest@live@mman:
- bat-atsm-1: [DMESG-FAIL][7] ([i915#13929]) -> [DMESG-FAIL][8] ([i915#14204])
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/bat-atsm-1/igt@i915_selftest@live@mman.html
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/bat-atsm-1/igt@i915_selftest@live@mman.html
[i915#12061]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12061
[i915#13929]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13929
[i915#14204]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14204
Build changes
-------------
* Linux: CI_DRM_17884 -> Patchwork_160638v1
CI-20190529: 20190529
CI_DRM_17884: a1e0224c47409e3c48cfc55a7db0321d22dc343e @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_8717: 8717
Patchwork_160638v1: a1e0224c47409e3c48cfc55a7db0321d22dc343e @ git://anongit.freedesktop.org/gfx-ci/linux
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/index.html
[-- Attachment #2: Type: text/html, Size: 3883 bytes --]
^ permalink raw reply [flat|nested] 13+ messages in thread
* ✗ i915.CI.Full: failure for drm/xe: Privatize struct xe_ggtt.
2026-01-26 10:45 [PATCH v6 0/5] drm/xe: Privatize struct xe_ggtt Maarten Lankhorst
` (5 preceding siblings ...)
2026-01-26 14:26 ` ✓ i915.CI.BAT: success for drm/xe: Privatize struct xe_ggtt Patchwork
@ 2026-01-26 18:16 ` Patchwork
6 siblings, 0 replies; 13+ messages in thread
From: Patchwork @ 2026-01-26 18:16 UTC (permalink / raw)
To: Maarten Lankhorst; +Cc: intel-gfx
[-- Attachment #1: Type: text/plain, Size: 70831 bytes --]
== Series Details ==
Series: drm/xe: Privatize struct xe_ggtt.
URL : https://patchwork.freedesktop.org/series/160638/
State : failure
== Summary ==
CI Bug Log - changes from CI_DRM_17884_full -> Patchwork_160638v1_full
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with Patchwork_160638v1_full absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in Patchwork_160638v1_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 (10 -> 11)
------------------------------
Additional (1): shard-snb-0
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in Patchwork_160638v1_full:
### IGT changes ###
#### Possible regressions ####
* igt@gem_barrier_race@remote-request:
- shard-dg2: [PASS][1] -> [DMESG-WARN][2] +1 other test dmesg-warn
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-dg2-6/igt@gem_barrier_race@remote-request.html
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-1/igt@gem_barrier_race@remote-request.html
Known issues
------------
Here are the changes found in Patchwork_160638v1_full that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@drm_buddy@drm_buddy:
- shard-dg2: NOTRUN -> [DMESG-WARN][3] ([i915#15095]) +1 other test dmesg-warn
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-4/igt@drm_buddy@drm_buddy.html
* igt@gem_ccs@suspend-resume@xmajor-compressed-compfmt0-smem-lmem0:
- shard-dg2: NOTRUN -> [INCOMPLETE][4] ([i915#12392] / [i915#13356])
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-7/igt@gem_ccs@suspend-resume@xmajor-compressed-compfmt0-smem-lmem0.html
* igt@gem_create@create-ext-cpu-access-big:
- shard-dg2: NOTRUN -> [FAIL][5] ([i915#15454])
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-4/igt@gem_create@create-ext-cpu-access-big.html
* igt@gem_ctx_isolation@preservation-s3:
- shard-rkl: [PASS][6] -> [INCOMPLETE][7] ([i915#13356]) +3 other tests incomplete
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-rkl-4/igt@gem_ctx_isolation@preservation-s3.html
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-3/igt@gem_ctx_isolation@preservation-s3.html
* igt@gem_ctx_persistence@heartbeat-close:
- shard-dg2: NOTRUN -> [SKIP][8] ([i915#8555])
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-4/igt@gem_ctx_persistence@heartbeat-close.html
* igt@gem_exec_balancer@bonded-false-hang:
- shard-dg2: NOTRUN -> [SKIP][9] ([i915#4812])
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-4/igt@gem_exec_balancer@bonded-false-hang.html
* igt@gem_exec_balancer@parallel-bb-first:
- shard-tglu: NOTRUN -> [SKIP][10] ([i915#4525])
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-tglu-3/igt@gem_exec_balancer@parallel-bb-first.html
* igt@gem_exec_balancer@parallel-keep-submit-fence:
- shard-rkl: NOTRUN -> [SKIP][11] ([i915#4525])
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-7/igt@gem_exec_balancer@parallel-keep-submit-fence.html
* igt@gem_exec_endless@dispatch@bcs0:
- shard-rkl: [PASS][12] -> [TIMEOUT][13] ([i915#3778]) +1 other test timeout
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-rkl-4/igt@gem_exec_endless@dispatch@bcs0.html
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-5/igt@gem_exec_endless@dispatch@bcs0.html
* igt@gem_exec_flush@basic-wb-rw-default:
- shard-dg2: NOTRUN -> [SKIP][14] ([i915#3539] / [i915#4852])
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-4/igt@gem_exec_flush@basic-wb-rw-default.html
* igt@gem_exec_reloc@basic-cpu-gtt-active:
- shard-dg2: NOTRUN -> [SKIP][15] ([i915#3281]) +2 other tests skip
[15]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-4/igt@gem_exec_reloc@basic-cpu-gtt-active.html
* igt@gem_exec_suspend@basic-s0:
- shard-dg2: [PASS][16] -> [INCOMPLETE][17] ([i915#13356]) +1 other test incomplete
[16]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-dg2-5/igt@gem_exec_suspend@basic-s0.html
[17]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-3/igt@gem_exec_suspend@basic-s0.html
* igt@gem_exec_suspend@basic-s3-devices:
- shard-dg1: [PASS][18] -> [DMESG-WARN][19] ([i915#4423]) +1 other test dmesg-warn
[18]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-dg1-18/igt@gem_exec_suspend@basic-s3-devices.html
[19]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg1-14/igt@gem_exec_suspend@basic-s3-devices.html
* igt@gem_exec_whisper@basic-contexts-priority:
- shard-dg2: [PASS][20] -> [ABORT][21] ([i915#13562])
[20]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-dg2-7/igt@gem_exec_whisper@basic-contexts-priority.html
[21]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-11/igt@gem_exec_whisper@basic-contexts-priority.html
* igt@gem_lmem_swapping@heavy-multi:
- shard-glk: NOTRUN -> [SKIP][22] ([i915#4613]) +2 other tests skip
[22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-glk5/igt@gem_lmem_swapping@heavy-multi.html
* igt@gem_lmem_swapping@heavy-verify-random:
- shard-tglu: NOTRUN -> [SKIP][23] ([i915#4613]) +1 other test skip
[23]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-tglu-3/igt@gem_lmem_swapping@heavy-verify-random.html
* igt@gem_lmem_swapping@parallel-random-verify-ccs:
- shard-rkl: NOTRUN -> [SKIP][24] ([i915#4613]) +1 other test skip
[24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-7/igt@gem_lmem_swapping@parallel-random-verify-ccs.html
* igt@gem_mmap_offset@clear-via-pagefault:
- shard-mtlp: [PASS][25] -> [ABORT][26] ([i915#14809]) +1 other test abort
[25]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-mtlp-5/igt@gem_mmap_offset@clear-via-pagefault.html
[26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-mtlp-4/igt@gem_mmap_offset@clear-via-pagefault.html
* igt@gem_pread@snoop:
- shard-rkl: NOTRUN -> [SKIP][27] ([i915#3282])
[27]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-7/igt@gem_pread@snoop.html
* igt@gem_readwrite@read-write:
- shard-dg2: NOTRUN -> [SKIP][28] ([i915#3282]) +1 other test skip
[28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-4/igt@gem_readwrite@read-write.html
* igt@gem_render_copy@yf-tiled-ccs-to-y-tiled:
- shard-dg2: NOTRUN -> [SKIP][29] ([i915#5190] / [i915#8428]) +1 other test skip
[29]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-4/igt@gem_render_copy@yf-tiled-ccs-to-y-tiled.html
* igt@gem_set_tiling_vs_blt@tiled-to-untiled:
- shard-rkl: NOTRUN -> [SKIP][30] ([i915#8411])
[30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-7/igt@gem_set_tiling_vs_blt@tiled-to-untiled.html
* igt@gem_tiled_pread_pwrite:
- shard-dg2: NOTRUN -> [SKIP][31] ([i915#4079])
[31]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-4/igt@gem_tiled_pread_pwrite.html
* igt@gem_tiling_max_stride:
- shard-dg2: NOTRUN -> [SKIP][32] ([i915#4077]) +3 other tests skip
[32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-4/igt@gem_tiling_max_stride.html
* igt@gem_userptr_blits@invalid-mmap-offset-unsync:
- shard-tglu: NOTRUN -> [SKIP][33] ([i915#3297])
[33]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-tglu-3/igt@gem_userptr_blits@invalid-mmap-offset-unsync.html
* igt@gem_userptr_blits@readonly-pwrite-unsync:
- shard-rkl: NOTRUN -> [SKIP][34] ([i915#3297])
[34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-7/igt@gem_userptr_blits@readonly-pwrite-unsync.html
* igt@gem_workarounds@suspend-resume:
- shard-glk: NOTRUN -> [INCOMPLETE][35] ([i915#13356] / [i915#14586])
[35]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-glk3/igt@gem_workarounds@suspend-resume.html
* igt@gen9_exec_parse@allowed-single:
- shard-glk: NOTRUN -> [ABORT][36] ([i915#5566])
[36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-glk5/igt@gen9_exec_parse@allowed-single.html
* igt@gen9_exec_parse@bb-chained:
- shard-tglu: NOTRUN -> [SKIP][37] ([i915#2527] / [i915#2856])
[37]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-tglu-3/igt@gen9_exec_parse@bb-chained.html
* igt@gen9_exec_parse@bb-oversize:
- shard-rkl: NOTRUN -> [SKIP][38] ([i915#2527])
[38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-7/igt@gen9_exec_parse@bb-oversize.html
* igt@gen9_exec_parse@bb-secure:
- shard-tglu-1: NOTRUN -> [SKIP][39] ([i915#2527] / [i915#2856])
[39]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-tglu-1/igt@gen9_exec_parse@bb-secure.html
* igt@gen9_exec_parse@valid-registers:
- shard-dg2: NOTRUN -> [SKIP][40] ([i915#2856]) +1 other test skip
[40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-4/igt@gen9_exec_parse@valid-registers.html
* igt@i915_module_load@resize-bar:
- shard-tglu-1: NOTRUN -> [SKIP][41] ([i915#6412])
[41]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-tglu-1/igt@i915_module_load@resize-bar.html
* igt@i915_pm_rc6_residency@media-rc6-accuracy:
- shard-tglu-1: NOTRUN -> [SKIP][42] +15 other tests skip
[42]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-tglu-1/igt@i915_pm_rc6_residency@media-rc6-accuracy.html
* igt@i915_selftest@live:
- shard-mtlp: [PASS][43] -> [DMESG-FAIL][44] ([i915#12061] / [i915#15560])
[43]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-mtlp-6/igt@i915_selftest@live.html
[44]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-mtlp-7/igt@i915_selftest@live.html
* igt@i915_selftest@live@workarounds:
- shard-mtlp: [PASS][45] -> [DMESG-FAIL][46] ([i915#12061])
[45]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-mtlp-6/igt@i915_selftest@live@workarounds.html
[46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-mtlp-7/igt@i915_selftest@live@workarounds.html
* igt@i915_suspend@basic-s3-without-i915:
- shard-tglu: NOTRUN -> [INCOMPLETE][47] ([i915#4817] / [i915#7443])
[47]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-tglu-10/igt@i915_suspend@basic-s3-without-i915.html
* igt@i915_suspend@sysfs-reader:
- shard-glk: [PASS][48] -> [INCOMPLETE][49] ([i915#4817])
[48]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-glk5/igt@i915_suspend@sysfs-reader.html
[49]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-glk8/igt@i915_suspend@sysfs-reader.html
* igt@kms_addfb_basic@invalid-smem-bo-on-discrete:
- shard-tglu: NOTRUN -> [SKIP][50] ([i915#12454] / [i915#12712])
[50]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-tglu-10/igt@kms_addfb_basic@invalid-smem-bo-on-discrete.html
* igt@kms_async_flips@async-flip-suspend-resume:
- shard-dg2: [PASS][51] -> [FAIL][52] ([i915#15285])
[51]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-dg2-1/igt@kms_async_flips@async-flip-suspend-resume.html
[52]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-11/igt@kms_async_flips@async-flip-suspend-resume.html
* igt@kms_async_flips@async-flip-suspend-resume@pipe-b-dp-3:
- shard-dg2: NOTRUN -> [FAIL][53] ([i915#15285])
[53]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-11/igt@kms_async_flips@async-flip-suspend-resume@pipe-b-dp-3.html
* igt@kms_big_fb@4-tiled-64bpp-rotate-270:
- shard-rkl: NOTRUN -> [SKIP][54] ([i915#5286])
[54]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-7/igt@kms_big_fb@4-tiled-64bpp-rotate-270.html
* igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0-hflip:
- shard-mtlp: [PASS][55] -> [FAIL][56] ([i915#5138]) +1 other test fail
[55]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-mtlp-8/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0-hflip.html
[56]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-mtlp-5/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0-hflip.html
* igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180:
- shard-tglu-1: NOTRUN -> [SKIP][57] ([i915#5286]) +1 other test skip
[57]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-tglu-1/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180.html
* igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180-hflip:
- shard-tglu: NOTRUN -> [SKIP][58] ([i915#5286]) +1 other test skip
[58]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-tglu-10/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180-hflip.html
* igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-180-hflip-async-flip:
- shard-dg2: NOTRUN -> [SKIP][59] ([i915#4538] / [i915#5190]) +3 other tests skip
[59]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-4/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-180-hflip-async-flip.html
* igt@kms_big_fb@yf-tiled-16bpp-rotate-270:
- shard-rkl: NOTRUN -> [SKIP][60] +4 other tests skip
[60]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-7/igt@kms_big_fb@yf-tiled-16bpp-rotate-270.html
* igt@kms_ccs@bad-rotation-90-4-tiled-dg2-mc-ccs@pipe-d-hdmi-a-3:
- shard-dg2: NOTRUN -> [SKIP][61] ([i915#6095]) +40 other tests skip
[61]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-6/igt@kms_ccs@bad-rotation-90-4-tiled-dg2-mc-ccs@pipe-d-hdmi-a-3.html
* igt@kms_ccs@bad-rotation-90-y-tiled-gen12-mc-ccs@pipe-c-dp-3:
- shard-dg2: NOTRUN -> [SKIP][62] ([i915#10307] / [i915#6095]) +117 other tests skip
[62]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-11/igt@kms_ccs@bad-rotation-90-y-tiled-gen12-mc-ccs@pipe-c-dp-3.html
* igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-rc-ccs@pipe-b-hdmi-a-1:
- shard-dg1: NOTRUN -> [SKIP][63] ([i915#6095]) +227 other tests skip
[63]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg1-14/igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-rc-ccs@pipe-b-hdmi-a-1.html
* igt@kms_ccs@crc-primary-rotation-180-yf-tiled-ccs@pipe-d-hdmi-a-1:
- shard-dg2: NOTRUN -> [SKIP][64] ([i915#10307] / [i915#10434] / [i915#6095]) +4 other tests skip
[64]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-4/igt@kms_ccs@crc-primary-rotation-180-yf-tiled-ccs@pipe-d-hdmi-a-1.html
* igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-mc-ccs:
- shard-tglu-1: NOTRUN -> [SKIP][65] ([i915#6095]) +19 other tests skip
[65]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-tglu-1/igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-mc-ccs.html
* igt@kms_ccs@crc-primary-suspend-y-tiled-ccs@pipe-a-hdmi-a-2:
- shard-rkl: NOTRUN -> [SKIP][66] ([i915#14544] / [i915#6095])
[66]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-6/igt@kms_ccs@crc-primary-suspend-y-tiled-ccs@pipe-a-hdmi-a-2.html
* igt@kms_ccs@crc-primary-suspend-y-tiled-ccs@pipe-c-hdmi-a-2:
- shard-rkl: NOTRUN -> [SKIP][67] ([i915#14098] / [i915#14544] / [i915#6095])
[67]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-6/igt@kms_ccs@crc-primary-suspend-y-tiled-ccs@pipe-c-hdmi-a-2.html
* igt@kms_ccs@crc-primary-suspend-yf-tiled-ccs@pipe-c-hdmi-a-2:
- shard-rkl: NOTRUN -> [SKIP][68] ([i915#14098] / [i915#6095]) +32 other tests skip
[68]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-7/igt@kms_ccs@crc-primary-suspend-yf-tiled-ccs@pipe-c-hdmi-a-2.html
* igt@kms_ccs@crc-sprite-planes-basic-4-tiled-bmg-ccs:
- shard-tglu: NOTRUN -> [SKIP][69] ([i915#12313])
[69]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-tglu-10/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-bmg-ccs.html
* igt@kms_ccs@random-ccs-data-4-tiled-mtl-rc-ccs-cc:
- shard-tglu: NOTRUN -> [SKIP][70] ([i915#6095]) +34 other tests skip
[70]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-tglu-10/igt@kms_ccs@random-ccs-data-4-tiled-mtl-rc-ccs-cc.html
* igt@kms_ccs@random-ccs-data-y-tiled-ccs@pipe-b-hdmi-a-1:
- shard-rkl: NOTRUN -> [SKIP][71] ([i915#6095]) +60 other tests skip
[71]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-2/igt@kms_ccs@random-ccs-data-y-tiled-ccs@pipe-b-hdmi-a-1.html
* igt@kms_cdclk@mode-transition-all-outputs:
- shard-dg2: NOTRUN -> [SKIP][72] ([i915#13784])
[72]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-4/igt@kms_cdclk@mode-transition-all-outputs.html
* igt@kms_cdclk@mode-transition@pipe-d-hdmi-a-3:
- shard-dg2: NOTRUN -> [SKIP][73] ([i915#13781]) +3 other tests skip
[73]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-6/igt@kms_cdclk@mode-transition@pipe-d-hdmi-a-3.html
* igt@kms_chamelium_audio@hdmi-audio-edid:
- shard-tglu-1: NOTRUN -> [SKIP][74] ([i915#11151] / [i915#7828]) +2 other tests skip
[74]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-tglu-1/igt@kms_chamelium_audio@hdmi-audio-edid.html
* igt@kms_chamelium_hpd@dp-hpd-storm:
- shard-dg2: NOTRUN -> [SKIP][75] ([i915#11151] / [i915#7828])
[75]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-4/igt@kms_chamelium_hpd@dp-hpd-storm.html
* igt@kms_chamelium_hpd@hdmi-hpd-storm:
- shard-rkl: NOTRUN -> [SKIP][76] ([i915#11151] / [i915#7828]) +2 other tests skip
[76]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-7/igt@kms_chamelium_hpd@hdmi-hpd-storm.html
* igt@kms_chamelium_hpd@vga-hpd-without-ddc:
- shard-tglu: NOTRUN -> [SKIP][77] ([i915#11151] / [i915#7828]) +2 other tests skip
[77]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-tglu-3/igt@kms_chamelium_hpd@vga-hpd-without-ddc.html
* igt@kms_content_protection@dp-mst-type-0-suspend-resume:
- shard-tglu: NOTRUN -> [SKIP][78] ([i915#15330])
[78]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-tglu-3/igt@kms_content_protection@dp-mst-type-0-suspend-resume.html
* igt@kms_content_protection@lic-type-0-hdcp14:
- shard-dg2: NOTRUN -> [SKIP][79] ([i915#6944])
[79]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-4/igt@kms_content_protection@lic-type-0-hdcp14.html
* igt@kms_content_protection@lic-type-1:
- shard-rkl: NOTRUN -> [SKIP][80] ([i915#6944] / [i915#9424])
[80]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-7/igt@kms_content_protection@lic-type-1.html
* igt@kms_content_protection@mei-interface:
- shard-tglu-1: NOTRUN -> [SKIP][81] ([i915#6944] / [i915#9424])
[81]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-tglu-1/igt@kms_content_protection@mei-interface.html
* igt@kms_cursor_crc@cursor-onscreen-128x42:
- shard-rkl: [PASS][82] -> [FAIL][83] ([i915#13566])
[82]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-rkl-7/igt@kms_cursor_crc@cursor-onscreen-128x42.html
[83]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-2/igt@kms_cursor_crc@cursor-onscreen-128x42.html
* igt@kms_cursor_crc@cursor-onscreen-32x10:
- shard-tglu: NOTRUN -> [SKIP][84] ([i915#3555])
[84]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-tglu-3/igt@kms_cursor_crc@cursor-onscreen-32x10.html
* igt@kms_cursor_crc@cursor-onscreen-max-size:
- shard-tglu-1: NOTRUN -> [SKIP][85] ([i915#3555])
[85]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-tglu-1/igt@kms_cursor_crc@cursor-onscreen-max-size.html
* igt@kms_cursor_crc@cursor-random-128x42@pipe-a-hdmi-a-1:
- shard-rkl: NOTRUN -> [FAIL][86] ([i915#13566]) +2 other tests fail
[86]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-2/igt@kms_cursor_crc@cursor-random-128x42@pipe-a-hdmi-a-1.html
* igt@kms_cursor_legacy@2x-long-cursor-vs-flip-legacy:
- shard-dg2: NOTRUN -> [SKIP][87] ([i915#13046] / [i915#5354]) +1 other test skip
[87]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-4/igt@kms_cursor_legacy@2x-long-cursor-vs-flip-legacy.html
* igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic:
- shard-tglu: NOTRUN -> [SKIP][88] ([i915#4103])
[88]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-tglu-3/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic.html
* igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions:
- shard-tglu-1: NOTRUN -> [SKIP][89] ([i915#4103])
[89]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-tglu-1/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions.html
* igt@kms_dither@fb-8bpc-vs-panel-6bpc:
- shard-dg2: NOTRUN -> [SKIP][90] ([i915#3555])
[90]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-4/igt@kms_dither@fb-8bpc-vs-panel-6bpc.html
* igt@kms_dp_aux_dev:
- shard-tglu: NOTRUN -> [SKIP][91] ([i915#1257])
[91]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-tglu-3/igt@kms_dp_aux_dev.html
* igt@kms_dsc@dsc-with-formats:
- shard-tglu: NOTRUN -> [SKIP][92] ([i915#3555] / [i915#3840])
[92]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-tglu-3/igt@kms_dsc@dsc-with-formats.html
* igt@kms_fbcon_fbt@fbc-suspend:
- shard-rkl: [PASS][93] -> [INCOMPLETE][94] ([i915#9878])
[93]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-rkl-8/igt@kms_fbcon_fbt@fbc-suspend.html
[94]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-4/igt@kms_fbcon_fbt@fbc-suspend.html
* igt@kms_fbcon_fbt@psr-suspend:
- shard-dg2: NOTRUN -> [SKIP][95] ([i915#3469])
[95]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-4/igt@kms_fbcon_fbt@psr-suspend.html
* igt@kms_flip@2x-absolute-wf_vblank:
- shard-rkl: NOTRUN -> [SKIP][96] ([i915#9934]) +2 other tests skip
[96]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-4/igt@kms_flip@2x-absolute-wf_vblank.html
* igt@kms_flip@2x-blocking-wf_vblank:
- shard-dg2: NOTRUN -> [SKIP][97] ([i915#9934]) +3 other tests skip
[97]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-4/igt@kms_flip@2x-blocking-wf_vblank.html
* igt@kms_flip@2x-flip-vs-rmfb-interruptible:
- shard-tglu: NOTRUN -> [SKIP][98] ([i915#3637] / [i915#9934])
[98]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-tglu-3/igt@kms_flip@2x-flip-vs-rmfb-interruptible.html
* igt@kms_flip@2x-plain-flip-interruptible:
- shard-tglu-1: NOTRUN -> [SKIP][99] ([i915#3637] / [i915#9934]) +1 other test skip
[99]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-tglu-1/igt@kms_flip@2x-plain-flip-interruptible.html
* igt@kms_flip@flip-vs-suspend-interruptible@b-hdmi-a2:
- shard-rkl: [PASS][100] -> [INCOMPLETE][101] ([i915#6113]) +1 other test incomplete
[100]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-rkl-4/igt@kms_flip@flip-vs-suspend-interruptible@b-hdmi-a2.html
[101]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-3/igt@kms_flip@flip-vs-suspend-interruptible@b-hdmi-a2.html
* igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-downscaling:
- shard-rkl: NOTRUN -> [SKIP][102] ([i915#2672] / [i915#3555]) +1 other test skip
[102]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-7/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-downscaling.html
* igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-downscaling@pipe-a-valid-mode:
- shard-rkl: NOTRUN -> [SKIP][103] ([i915#2672]) +1 other test skip
[103]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-7/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-downscaling@pipe-a-valid-mode.html
* igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-downscaling:
- shard-dg2: NOTRUN -> [SKIP][104] ([i915#2672] / [i915#3555])
[104]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-4/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-downscaling.html
* igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-downscaling@pipe-a-valid-mode:
- shard-dg2: NOTRUN -> [SKIP][105] ([i915#2672]) +1 other test skip
[105]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-4/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-downscaling@pipe-a-valid-mode.html
* igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilercccs-downscaling:
- shard-dg2: NOTRUN -> [SKIP][106] ([i915#2672] / [i915#3555] / [i915#5190])
[106]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-4/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilercccs-downscaling.html
* igt@kms_flip_scaled_crc@flip-p016-linear-to-p016-linear-reflect-x:
- shard-tglu-1: NOTRUN -> [SKIP][107] ([i915#15573]) +1 other test skip
[107]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-tglu-1/igt@kms_flip_scaled_crc@flip-p016-linear-to-p016-linear-reflect-x.html
* igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-indfb-draw-mmap-gtt:
- shard-dg2: NOTRUN -> [SKIP][108] ([i915#8708]) +1 other test skip
[108]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-4/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-indfb-draw-mmap-gtt.html
* igt@kms_frontbuffer_tracking@fbc-abgr161616f-draw-blt:
- shard-tglu-1: NOTRUN -> [SKIP][109] ([i915#15574])
[109]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-tglu-1/igt@kms_frontbuffer_tracking@fbc-abgr161616f-draw-blt.html
* igt@kms_frontbuffer_tracking@fbc-abgr161616f-draw-mmap-gtt:
- shard-dg2: NOTRUN -> [SKIP][110] ([i915#15574])
[110]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-4/igt@kms_frontbuffer_tracking@fbc-abgr161616f-draw-mmap-gtt.html
* igt@kms_frontbuffer_tracking@fbcpsr-1p-pri-indfb-multidraw:
- shard-rkl: NOTRUN -> [SKIP][111] ([i915#15102] / [i915#3023]) +5 other tests skip
[111]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-7/igt@kms_frontbuffer_tracking@fbcpsr-1p-pri-indfb-multidraw.html
* igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-cur-indfb-move:
- shard-dg2: NOTRUN -> [SKIP][112] ([i915#5354]) +4 other tests skip
[112]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-4/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-cur-indfb-move.html
* igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-indfb-msflip-blt:
- shard-rkl: NOTRUN -> [SKIP][113] ([i915#1825]) +4 other tests skip
[113]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-7/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-indfb-msflip-blt.html
* igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-spr-indfb-draw-mmap-wc:
- shard-glk: NOTRUN -> [SKIP][114] +301 other tests skip
[114]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-glk3/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-spr-indfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-pwrite:
- shard-dg2: NOTRUN -> [SKIP][115] ([i915#10433] / [i915#15102] / [i915#3458])
[115]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-4/igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-pwrite.html
* igt@kms_frontbuffer_tracking@psr-1p-offscreen-pri-shrfb-draw-mmap-wc:
- shard-tglu-1: NOTRUN -> [SKIP][116] ([i915#15102]) +3 other tests skip
[116]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-tglu-1/igt@kms_frontbuffer_tracking@psr-1p-offscreen-pri-shrfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@psr-1p-offscreen-pri-shrfb-draw-render:
- shard-rkl: NOTRUN -> [SKIP][117] ([i915#15102])
[117]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-7/igt@kms_frontbuffer_tracking@psr-1p-offscreen-pri-shrfb-draw-render.html
* igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-draw-render:
- shard-dg2: NOTRUN -> [SKIP][118] ([i915#15102] / [i915#3458]) +2 other tests skip
[118]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-4/igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-draw-render.html
* igt@kms_frontbuffer_tracking@psr-2p-primscrn-cur-indfb-draw-pwrite:
- shard-tglu: NOTRUN -> [SKIP][119] +16 other tests skip
[119]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-tglu-10/igt@kms_frontbuffer_tracking@psr-2p-primscrn-cur-indfb-draw-pwrite.html
* igt@kms_frontbuffer_tracking@psr-abgr161616f-draw-blt:
- shard-rkl: NOTRUN -> [SKIP][120] ([i915#15574])
[120]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-7/igt@kms_frontbuffer_tracking@psr-abgr161616f-draw-blt.html
* igt@kms_frontbuffer_tracking@psr-abgr161616f-draw-pwrite:
- shard-tglu: NOTRUN -> [SKIP][121] ([i915#15574])
[121]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-tglu-3/igt@kms_frontbuffer_tracking@psr-abgr161616f-draw-pwrite.html
* igt@kms_frontbuffer_tracking@psr-shrfb-scaledprimary:
- shard-tglu: NOTRUN -> [SKIP][122] ([i915#15102]) +9 other tests skip
[122]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-tglu-3/igt@kms_frontbuffer_tracking@psr-shrfb-scaledprimary.html
* igt@kms_hdr@bpc-switch-dpms:
- shard-dg2: NOTRUN -> [SKIP][123] ([i915#3555] / [i915#8228])
[123]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-4/igt@kms_hdr@bpc-switch-dpms.html
* igt@kms_hdr@brightness-with-hdr:
- shard-tglu: NOTRUN -> [SKIP][124] ([i915#12713])
[124]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-tglu-10/igt@kms_hdr@brightness-with-hdr.html
* igt@kms_hdr@invalid-metadata-sizes:
- shard-dg2: [PASS][125] -> [SKIP][126] ([i915#3555] / [i915#8228]) +1 other test skip
[125]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-dg2-11/igt@kms_hdr@invalid-metadata-sizes.html
[126]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-6/igt@kms_hdr@invalid-metadata-sizes.html
- shard-rkl: [PASS][127] -> [SKIP][128] ([i915#3555] / [i915#8228])
[127]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-rkl-6/igt@kms_hdr@invalid-metadata-sizes.html
[128]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-8/igt@kms_hdr@invalid-metadata-sizes.html
* igt@kms_hdr@static-swap:
- shard-tglu-1: NOTRUN -> [SKIP][129] ([i915#3555] / [i915#8228])
[129]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-tglu-1/igt@kms_hdr@static-swap.html
* igt@kms_joiner@basic-max-non-joiner:
- shard-tglu-1: NOTRUN -> [SKIP][130] ([i915#13688])
[130]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-tglu-1/igt@kms_joiner@basic-max-non-joiner.html
* igt@kms_joiner@basic-ultra-joiner:
- shard-tglu: NOTRUN -> [SKIP][131] ([i915#15458])
[131]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-tglu-3/igt@kms_joiner@basic-ultra-joiner.html
* igt@kms_panel_fitting@atomic-fastset:
- shard-tglu-1: NOTRUN -> [SKIP][132] ([i915#6301])
[132]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-tglu-1/igt@kms_panel_fitting@atomic-fastset.html
* igt@kms_pipe_b_c_ivb@from-pipe-c-to-b-with-3-lanes:
- shard-dg2: NOTRUN -> [SKIP][133] +1 other test skip
[133]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-4/igt@kms_pipe_b_c_ivb@from-pipe-c-to-b-with-3-lanes.html
* igt@kms_pipe_crc_basic@suspend-read-crc:
- shard-glk10: NOTRUN -> [INCOMPLETE][134] ([i915#12756] / [i915#13409] / [i915#13476])
[134]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-glk10/igt@kms_pipe_crc_basic@suspend-read-crc.html
* igt@kms_pipe_crc_basic@suspend-read-crc@pipe-b-hdmi-a-2:
- shard-glk10: NOTRUN -> [INCOMPLETE][135] ([i915#13409] / [i915#13476])
[135]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-glk10/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-b-hdmi-a-2.html
* igt@kms_plane_alpha_blend@alpha-basic:
- shard-glk10: NOTRUN -> [FAIL][136] ([i915#12178])
[136]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-glk10/igt@kms_plane_alpha_blend@alpha-basic.html
* igt@kms_plane_alpha_blend@alpha-basic@pipe-c-hdmi-a-1:
- shard-glk10: NOTRUN -> [FAIL][137] ([i915#7862]) +1 other test fail
[137]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-glk10/igt@kms_plane_alpha_blend@alpha-basic@pipe-c-hdmi-a-1.html
* igt@kms_plane_multiple@2x-tiling-x:
- shard-dg2: NOTRUN -> [SKIP][138] ([i915#13958])
[138]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-4/igt@kms_plane_multiple@2x-tiling-x.html
* igt@kms_plane_scaling@plane-upscale-20x20-with-rotation@pipe-a:
- shard-rkl: NOTRUN -> [SKIP][139] ([i915#15329]) +7 other tests skip
[139]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-7/igt@kms_plane_scaling@plane-upscale-20x20-with-rotation@pipe-a.html
* igt@kms_pm_rpm@dpms-lpsp:
- shard-dg2: [PASS][140] -> [SKIP][141] ([i915#15073])
[140]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-dg2-4/igt@kms_pm_rpm@dpms-lpsp.html
[141]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-11/igt@kms_pm_rpm@dpms-lpsp.html
* igt@kms_pm_rpm@dpms-non-lpsp:
- shard-rkl: [PASS][142] -> [SKIP][143] ([i915#15073])
[142]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-rkl-7/igt@kms_pm_rpm@dpms-non-lpsp.html
[143]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-2/igt@kms_pm_rpm@dpms-non-lpsp.html
* igt@kms_pm_rpm@modeset-lpsp-stress:
- shard-rkl: NOTRUN -> [SKIP][144] ([i915#15073])
[144]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-7/igt@kms_pm_rpm@modeset-lpsp-stress.html
- shard-dg1: [PASS][145] -> [SKIP][146] ([i915#15073]) +3 other tests skip
[145]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-dg1-14/igt@kms_pm_rpm@modeset-lpsp-stress.html
[146]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg1-18/igt@kms_pm_rpm@modeset-lpsp-stress.html
* igt@kms_pm_rpm@package-g7:
- shard-tglu: NOTRUN -> [SKIP][147] ([i915#15403])
[147]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-tglu-3/igt@kms_pm_rpm@package-g7.html
* igt@kms_pm_rpm@system-suspend-idle:
- shard-rkl: [PASS][148] -> [ABORT][149] ([i915#15132])
[148]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-rkl-2/igt@kms_pm_rpm@system-suspend-idle.html
[149]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-1/igt@kms_pm_rpm@system-suspend-idle.html
* igt@kms_psr2_sf@fbc-pr-overlay-plane-update-continuous-sf:
- shard-rkl: NOTRUN -> [SKIP][150] ([i915#11520]) +1 other test skip
[150]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-7/igt@kms_psr2_sf@fbc-pr-overlay-plane-update-continuous-sf.html
* igt@kms_psr2_sf@fbc-pr-plane-move-sf-dmg-area:
- shard-glk: NOTRUN -> [SKIP][151] ([i915#11520]) +8 other tests skip
[151]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-glk6/igt@kms_psr2_sf@fbc-pr-plane-move-sf-dmg-area.html
* igt@kms_psr2_sf@fbc-psr2-cursor-plane-update-sf:
- shard-glk10: NOTRUN -> [SKIP][152] ([i915#11520]) +2 other tests skip
[152]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-glk10/igt@kms_psr2_sf@fbc-psr2-cursor-plane-update-sf.html
* igt@kms_psr2_sf@pr-cursor-plane-move-continuous-exceed-sf:
- shard-dg2: NOTRUN -> [SKIP][153] ([i915#11520])
[153]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-4/igt@kms_psr2_sf@pr-cursor-plane-move-continuous-exceed-sf.html
* igt@kms_psr2_sf@pr-plane-move-sf-dmg-area:
- shard-tglu-1: NOTRUN -> [SKIP][154] ([i915#11520]) +1 other test skip
[154]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-tglu-1/igt@kms_psr2_sf@pr-plane-move-sf-dmg-area.html
* igt@kms_psr2_sf@psr2-primary-plane-update-sf-dmg-area-big-fb:
- shard-tglu: NOTRUN -> [SKIP][155] ([i915#11520]) +3 other tests skip
[155]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-tglu-10/igt@kms_psr2_sf@psr2-primary-plane-update-sf-dmg-area-big-fb.html
* igt@kms_psr@fbc-pr-primary-render:
- shard-glk10: NOTRUN -> [SKIP][156] +126 other tests skip
[156]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-glk10/igt@kms_psr@fbc-pr-primary-render.html
* igt@kms_psr@fbc-psr-basic:
- shard-dg2: NOTRUN -> [SKIP][157] ([i915#1072] / [i915#9732]) +4 other tests skip
[157]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-4/igt@kms_psr@fbc-psr-basic.html
* igt@kms_psr@fbc-psr2-no-drrs:
- shard-rkl: NOTRUN -> [SKIP][158] ([i915#1072] / [i915#9732]) +4 other tests skip
[158]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-7/igt@kms_psr@fbc-psr2-no-drrs.html
* igt@kms_psr@pr-sprite-mmap-cpu:
- shard-tglu: NOTRUN -> [SKIP][159] ([i915#9732]) +6 other tests skip
[159]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-tglu-3/igt@kms_psr@pr-sprite-mmap-cpu.html
* igt@kms_psr@psr-cursor-plane-move:
- shard-tglu-1: NOTRUN -> [SKIP][160] ([i915#9732]) +4 other tests skip
[160]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-tglu-1/igt@kms_psr@psr-cursor-plane-move.html
* igt@kms_rotation_crc@primary-4-tiled-reflect-x-180:
- shard-tglu-1: NOTRUN -> [SKIP][161] ([i915#5289])
[161]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-tglu-1/igt@kms_rotation_crc@primary-4-tiled-reflect-x-180.html
* igt@kms_rotation_crc@primary-yf-tiled-reflect-x-270:
- shard-tglu: NOTRUN -> [SKIP][162] ([i915#5289])
[162]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-tglu-10/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-270.html
* igt@kms_rotation_crc@primary-yf-tiled-reflect-x-90:
- shard-rkl: NOTRUN -> [SKIP][163] ([i915#5289])
[163]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-7/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-90.html
* igt@kms_vblank@ts-continuation-dpms-suspend@pipe-a-hdmi-a-1:
- shard-glk: NOTRUN -> [INCOMPLETE][164] ([i915#12276]) +1 other test incomplete
[164]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-glk6/igt@kms_vblank@ts-continuation-dpms-suspend@pipe-a-hdmi-a-1.html
* igt@kms_vrr@seamless-rr-switch-virtual:
- shard-rkl: NOTRUN -> [SKIP][165] ([i915#9906])
[165]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-7/igt@kms_vrr@seamless-rr-switch-virtual.html
* igt@prime_vgem@coherency-gtt:
- shard-rkl: NOTRUN -> [SKIP][166] ([i915#3708])
[166]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-7/igt@prime_vgem@coherency-gtt.html
* igt@sriov_basic@enable-vfs-bind-unbind-each:
- shard-dg2: NOTRUN -> [SKIP][167] ([i915#9917])
[167]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-4/igt@sriov_basic@enable-vfs-bind-unbind-each.html
#### Possible fixes ####
* igt@gem_ccs@suspend-resume@linear-compressed-compfmt0-smem-lmem0:
- shard-dg2: [INCOMPLETE][168] ([i915#13356]) -> [PASS][169]
[168]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-dg2-7/igt@gem_ccs@suspend-resume@linear-compressed-compfmt0-smem-lmem0.html
[169]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-7/igt@gem_ccs@suspend-resume@linear-compressed-compfmt0-smem-lmem0.html
* igt@i915_pm_rpm@gem-execbuf@smem0:
- shard-dg1: [DMESG-WARN][170] ([i915#4423]) -> [PASS][171] +3 other tests pass
[170]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-dg1-16/igt@i915_pm_rpm@gem-execbuf@smem0.html
[171]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg1-12/igt@i915_pm_rpm@gem-execbuf@smem0.html
* igt@i915_power@sanity:
- shard-mtlp: [SKIP][172] ([i915#7984]) -> [PASS][173]
[172]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-mtlp-6/igt@i915_power@sanity.html
[173]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-mtlp-2/igt@i915_power@sanity.html
* igt@i915_suspend@sysfs-reader:
- shard-rkl: [INCOMPLETE][174] ([i915#4817]) -> [PASS][175]
[174]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-rkl-3/igt@i915_suspend@sysfs-reader.html
[175]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-4/igt@i915_suspend@sysfs-reader.html
* igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-0-async-flip:
- shard-mtlp: [DMESG-WARN][176] ([i915#12935]) -> [PASS][177]
[176]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-mtlp-5/igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-0-async-flip.html
[177]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-mtlp-4/igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-0-async-flip.html
* igt@kms_color@deep-color:
- shard-dg2: [SKIP][178] ([i915#12655] / [i915#3555]) -> [PASS][179]
[178]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-dg2-4/igt@kms_color@deep-color.html
[179]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-11/igt@kms_color@deep-color.html
* igt@kms_cursor_crc@cursor-sliding-256x85:
- shard-tglu: [FAIL][180] ([i915#13566]) -> [PASS][181] +1 other test pass
[180]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-tglu-4/igt@kms_cursor_crc@cursor-sliding-256x85.html
[181]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-tglu-6/igt@kms_cursor_crc@cursor-sliding-256x85.html
* igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-cur-indfb-onoff:
- shard-snb: [SKIP][182] -> [PASS][183]
[182]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-snb5/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-cur-indfb-onoff.html
[183]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-snb1/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-cur-indfb-onoff.html
* igt@kms_pm_rpm@dpms-mode-unset-non-lpsp:
- shard-dg1: [SKIP][184] ([i915#15073]) -> [PASS][185]
[184]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-dg1-14/igt@kms_pm_rpm@dpms-mode-unset-non-lpsp.html
[185]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg1-12/igt@kms_pm_rpm@dpms-mode-unset-non-lpsp.html
* igt@kms_pm_rpm@modeset-lpsp:
- shard-dg2: [SKIP][186] ([i915#15073]) -> [PASS][187]
[186]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-dg2-3/igt@kms_pm_rpm@modeset-lpsp.html
[187]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-4/igt@kms_pm_rpm@modeset-lpsp.html
* igt@kms_pm_rpm@system-suspend-idle:
- shard-dg2: [INCOMPLETE][188] ([i915#14419]) -> [PASS][189]
[188]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-dg2-3/igt@kms_pm_rpm@system-suspend-idle.html
[189]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-4/igt@kms_pm_rpm@system-suspend-idle.html
* igt@kms_vrr@negative-basic:
- shard-mtlp: [FAIL][190] ([i915#15420]) -> [PASS][191] +1 other test pass
[190]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-mtlp-8/igt@kms_vrr@negative-basic.html
[191]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-mtlp-5/igt@kms_vrr@negative-basic.html
* igt@perf_pmu@busy-double-start@vecs1:
- shard-dg2: [FAIL][192] ([i915#4349]) -> [PASS][193] +4 other tests pass
[192]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-dg2-4/igt@perf_pmu@busy-double-start@vecs1.html
[193]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-11/igt@perf_pmu@busy-double-start@vecs1.html
#### Warnings ####
* igt@gem_exec_balancer@parallel-ordering:
- shard-rkl: [SKIP][194] ([i915#14544] / [i915#4525]) -> [SKIP][195] ([i915#4525])
[194]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-rkl-6/igt@gem_exec_balancer@parallel-ordering.html
[195]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-8/igt@gem_exec_balancer@parallel-ordering.html
* igt@gem_exec_reloc@basic-write-wc-active:
- shard-rkl: [SKIP][196] ([i915#14544] / [i915#3281]) -> [SKIP][197] ([i915#3281]) +3 other tests skip
[196]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-rkl-6/igt@gem_exec_reloc@basic-write-wc-active.html
[197]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-8/igt@gem_exec_reloc@basic-write-wc-active.html
* igt@gen9_exec_parse@bb-start-far:
- shard-rkl: [SKIP][198] ([i915#14544] / [i915#2527]) -> [SKIP][199] ([i915#2527])
[198]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-rkl-6/igt@gen9_exec_parse@bb-start-far.html
[199]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-8/igt@gen9_exec_parse@bb-start-far.html
* igt@kms_big_fb@4-tiled-16bpp-rotate-0:
- shard-rkl: [SKIP][200] ([i915#14544] / [i915#5286]) -> [SKIP][201] ([i915#5286]) +1 other test skip
[200]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-rkl-6/igt@kms_big_fb@4-tiled-16bpp-rotate-0.html
[201]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-8/igt@kms_big_fb@4-tiled-16bpp-rotate-0.html
* igt@kms_big_fb@x-tiled-32bpp-rotate-270:
- shard-dg1: [SKIP][202] ([i915#3638] / [i915#4423]) -> [SKIP][203] ([i915#3638])
[202]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-dg1-16/igt@kms_big_fb@x-tiled-32bpp-rotate-270.html
[203]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg1-12/igt@kms_big_fb@x-tiled-32bpp-rotate-270.html
* igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-0-hflip:
- shard-rkl: [SKIP][204] -> [SKIP][205] ([i915#14544])
[204]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-rkl-2/igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-0-hflip.html
[205]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-6/igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-0-hflip.html
* igt@kms_ccs@crc-primary-rotation-180-4-tiled-dg2-mc-ccs:
- shard-rkl: [SKIP][206] ([i915#14098] / [i915#14544] / [i915#6095]) -> [SKIP][207] ([i915#14098] / [i915#6095]) +1 other test skip
[206]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-rkl-6/igt@kms_ccs@crc-primary-rotation-180-4-tiled-dg2-mc-ccs.html
[207]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-8/igt@kms_ccs@crc-primary-rotation-180-4-tiled-dg2-mc-ccs.html
* igt@kms_ccs@crc-primary-suspend-y-tiled-ccs:
- shard-rkl: [SKIP][208] ([i915#14098] / [i915#6095]) -> [SKIP][209] ([i915#14098] / [i915#14544] / [i915#6095])
[208]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-rkl-2/igt@kms_ccs@crc-primary-suspend-y-tiled-ccs.html
[209]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-6/igt@kms_ccs@crc-primary-suspend-y-tiled-ccs.html
* igt@kms_ccs@crc-sprite-planes-basic-4-tiled-bmg-ccs:
- shard-rkl: [SKIP][210] ([i915#12313]) -> [SKIP][211] ([i915#12313] / [i915#14544])
[210]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-rkl-2/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-bmg-ccs.html
[211]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-6/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-bmg-ccs.html
* igt@kms_chamelium_edid@vga-edid-read:
- shard-rkl: [SKIP][212] ([i915#11151] / [i915#14544] / [i915#7828]) -> [SKIP][213] ([i915#11151] / [i915#7828]) +1 other test skip
[212]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-rkl-6/igt@kms_chamelium_edid@vga-edid-read.html
[213]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-8/igt@kms_chamelium_edid@vga-edid-read.html
* igt@kms_content_protection@dp-mst-lic-type-1:
- shard-rkl: [SKIP][214] ([i915#14544] / [i915#15330] / [i915#3116]) -> [SKIP][215] ([i915#15330] / [i915#3116])
[214]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-rkl-6/igt@kms_content_protection@dp-mst-lic-type-1.html
[215]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-8/igt@kms_content_protection@dp-mst-lic-type-1.html
* igt@kms_content_protection@srm:
- shard-dg2: [FAIL][216] ([i915#7173]) -> [SKIP][217] ([i915#6944] / [i915#7118])
[216]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-dg2-11/igt@kms_content_protection@srm.html
[217]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-6/igt@kms_content_protection@srm.html
* igt@kms_content_protection@uevent:
- shard-dg2: [FAIL][218] ([i915#1339] / [i915#7173]) -> [SKIP][219] ([i915#6944] / [i915#7118] / [i915#9424])
[218]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-dg2-11/igt@kms_content_protection@uevent.html
[219]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-6/igt@kms_content_protection@uevent.html
* igt@kms_cursor_crc@cursor-rapid-movement-512x170:
- shard-rkl: [SKIP][220] ([i915#13049] / [i915#14544]) -> [SKIP][221] ([i915#13049])
[220]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-rkl-6/igt@kms_cursor_crc@cursor-rapid-movement-512x170.html
[221]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-8/igt@kms_cursor_crc@cursor-rapid-movement-512x170.html
* igt@kms_cursor_crc@cursor-sliding-max-size:
- shard-rkl: [SKIP][222] ([i915#14544] / [i915#3555]) -> [SKIP][223] ([i915#3555])
[222]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-rkl-6/igt@kms_cursor_crc@cursor-sliding-max-size.html
[223]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-8/igt@kms_cursor_crc@cursor-sliding-max-size.html
* igt@kms_cursor_legacy@cursora-vs-flipb-legacy:
- shard-rkl: [SKIP][224] ([i915#14544]) -> [SKIP][225] +4 other tests skip
[224]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-rkl-6/igt@kms_cursor_legacy@cursora-vs-flipb-legacy.html
[225]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-8/igt@kms_cursor_legacy@cursora-vs-flipb-legacy.html
* igt@kms_cursor_legacy@cursorb-vs-flipb-toggle:
- shard-dg1: [SKIP][226] ([i915#4423]) -> [SKIP][227] +1 other test skip
[226]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-dg1-18/igt@kms_cursor_legacy@cursorb-vs-flipb-toggle.html
[227]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg1-14/igt@kms_cursor_legacy@cursorb-vs-flipb-toggle.html
* igt@kms_dp_link_training@uhbr-mst:
- shard-rkl: [SKIP][228] ([i915#13748] / [i915#14544]) -> [SKIP][229] ([i915#13748])
[228]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-rkl-6/igt@kms_dp_link_training@uhbr-mst.html
[229]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-8/igt@kms_dp_link_training@uhbr-mst.html
* igt@kms_flip@2x-flip-vs-wf_vblank-interruptible:
- shard-rkl: [SKIP][230] ([i915#14544] / [i915#9934]) -> [SKIP][231] ([i915#9934]) +1 other test skip
[230]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-rkl-6/igt@kms_flip@2x-flip-vs-wf_vblank-interruptible.html
[231]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-8/igt@kms_flip@2x-flip-vs-wf_vblank-interruptible.html
* igt@kms_flip@flip-vs-suspend-interruptible:
- shard-glk: [INCOMPLETE][232] ([i915#12314] / [i915#12745] / [i915#4839]) -> [INCOMPLETE][233] ([i915#12745] / [i915#4839] / [i915#6113])
[232]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-glk8/igt@kms_flip@flip-vs-suspend-interruptible.html
[233]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-glk2/igt@kms_flip@flip-vs-suspend-interruptible.html
* igt@kms_flip@flip-vs-suspend-interruptible@a-hdmi-a1:
- shard-glk: [INCOMPLETE][234] ([i915#12314] / [i915#12745]) -> [INCOMPLETE][235] ([i915#12745])
[234]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-glk8/igt@kms_flip@flip-vs-suspend-interruptible@a-hdmi-a1.html
[235]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-glk2/igt@kms_flip@flip-vs-suspend-interruptible@a-hdmi-a1.html
* igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-downscaling:
- shard-rkl: [SKIP][236] ([i915#14544] / [i915#2672] / [i915#3555]) -> [SKIP][237] ([i915#2672] / [i915#3555])
[236]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-rkl-6/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-downscaling.html
[237]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-8/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-downscaling.html
* igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-downscaling@pipe-a-valid-mode:
- shard-rkl: [SKIP][238] ([i915#14544] / [i915#2672]) -> [SKIP][239] ([i915#2672])
[238]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-rkl-6/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-downscaling@pipe-a-valid-mode.html
[239]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-8/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-downscaling@pipe-a-valid-mode.html
* igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-indfb-msflip-blt:
- shard-rkl: [SKIP][240] ([i915#14544] / [i915#1825]) -> [SKIP][241] ([i915#1825]) +7 other tests skip
[240]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-rkl-6/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-indfb-msflip-blt.html
[241]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-8/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-indfb-msflip-blt.html
* igt@kms_frontbuffer_tracking@fbcpsr-1p-offscreen-pri-indfb-draw-render:
- shard-rkl: [SKIP][242] ([i915#14544] / [i915#15102]) -> [SKIP][243] ([i915#15102]) +1 other test skip
[242]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsr-1p-offscreen-pri-indfb-draw-render.html
[243]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-8/igt@kms_frontbuffer_tracking@fbcpsr-1p-offscreen-pri-indfb-draw-render.html
* igt@kms_frontbuffer_tracking@fbcpsr-shrfb-scaledprimary:
- shard-dg2: [SKIP][244] ([i915#10433] / [i915#15102] / [i915#3458]) -> [SKIP][245] ([i915#15102] / [i915#3458]) +2 other tests skip
[244]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-dg2-4/igt@kms_frontbuffer_tracking@fbcpsr-shrfb-scaledprimary.html
[245]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-11/igt@kms_frontbuffer_tracking@fbcpsr-shrfb-scaledprimary.html
* igt@kms_frontbuffer_tracking@fbcpsr-suspend:
- shard-dg2: [SKIP][246] ([i915#15102] / [i915#3458]) -> [SKIP][247] ([i915#10433] / [i915#15102] / [i915#3458]) +2 other tests skip
[246]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-dg2-3/igt@kms_frontbuffer_tracking@fbcpsr-suspend.html
[247]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg2-4/igt@kms_frontbuffer_tracking@fbcpsr-suspend.html
- shard-rkl: [SKIP][248] ([i915#15102] / [i915#3023]) -> [SKIP][249] ([i915#14544] / [i915#15102] / [i915#3023])
[248]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-rkl-2/igt@kms_frontbuffer_tracking@fbcpsr-suspend.html
[249]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsr-suspend.html
* igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-shrfb-draw-mmap-gtt:
- shard-rkl: [SKIP][250] ([i915#14544] / [i915#15102] / [i915#3023]) -> [SKIP][251] ([i915#15102] / [i915#3023]) +4 other tests skip
[250]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-rkl-6/igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-shrfb-draw-mmap-gtt.html
[251]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-8/igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-shrfb-draw-mmap-gtt.html
* igt@kms_pm_backlight@fade:
- shard-rkl: [SKIP][252] ([i915#14544] / [i915#5354]) -> [SKIP][253] ([i915#5354])
[252]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-rkl-6/igt@kms_pm_backlight@fade.html
[253]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-8/igt@kms_pm_backlight@fade.html
* igt@kms_pm_lpsp@kms-lpsp:
- shard-rkl: [SKIP][254] ([i915#9340]) -> [SKIP][255] ([i915#3828])
[254]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-rkl-4/igt@kms_pm_lpsp@kms-lpsp.html
[255]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-5/igt@kms_pm_lpsp@kms-lpsp.html
- shard-dg1: [SKIP][256] ([i915#9340]) -> [SKIP][257] ([i915#3828])
[256]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-dg1-16/igt@kms_pm_lpsp@kms-lpsp.html
[257]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-dg1-15/igt@kms_pm_lpsp@kms-lpsp.html
* igt@kms_prime@d3hot:
- shard-rkl: [SKIP][258] ([i915#14544] / [i915#6524]) -> [SKIP][259] ([i915#6524])
[258]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-rkl-6/igt@kms_prime@d3hot.html
[259]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-8/igt@kms_prime@d3hot.html
* igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-exceed-sf:
- shard-rkl: [SKIP][260] ([i915#11520]) -> [SKIP][261] ([i915#11520] / [i915#14544])
[260]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-rkl-2/igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-exceed-sf.html
[261]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-6/igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-exceed-sf.html
* igt@kms_psr2_sf@pr-overlay-plane-move-continuous-exceed-sf:
- shard-rkl: [SKIP][262] ([i915#11520] / [i915#14544]) -> [SKIP][263] ([i915#11520]) +1 other test skip
[262]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-rkl-6/igt@kms_psr2_sf@pr-overlay-plane-move-continuous-exceed-sf.html
[263]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-8/igt@kms_psr2_sf@pr-overlay-plane-move-continuous-exceed-sf.html
* igt@kms_psr@pr-cursor-mmap-cpu:
- shard-rkl: [SKIP][264] ([i915#1072] / [i915#14544] / [i915#9732]) -> [SKIP][265] ([i915#1072] / [i915#9732]) +4 other tests skip
[264]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17884/shard-rkl-6/igt@kms_psr@pr-cursor-mmap-cpu.html
[265]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/shard-rkl-8/igt@kms_psr@pr-cursor-mmap-cpu.html
[i915#10307]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10307
[i915#10433]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10433
[i915#10434]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10434
[i915#1072]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1072
[i915#11151]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11151
[i915#11520]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11520
[i915#12061]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12061
[i915#12178]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12178
[i915#12276]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12276
[i915#12313]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12313
[i915#12314]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12314
[i915#12392]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12392
[i915#12454]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12454
[i915#1257]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1257
[i915#12655]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12655
[i915#12712]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12712
[i915#12713]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12713
[i915#12745]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12745
[i915#12756]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12756
[i915#12935]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12935
[i915#13046]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13046
[i915#13049]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13049
[i915#13356]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13356
[i915#1339]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1339
[i915#13409]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13409
[i915#13476]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13476
[i915#13562]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13562
[i915#13566]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13566
[i915#13688]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13688
[i915#13748]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13748
[i915#13781]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13781
[i915#13784]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13784
[i915#13958]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13958
[i915#14098]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14098
[i915#14419]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14419
[i915#14544]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14544
[i915#14586]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14586
[i915#14809]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14809
[i915#15073]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15073
[i915#15095]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15095
[i915#15102]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15102
[i915#15132]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15132
[i915#15285]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15285
[i915#15329]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15329
[i915#15330]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15330
[i915#15403]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15403
[i915#15420]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15420
[i915#15454]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15454
[i915#15458]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15458
[i915#15560]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15560
[i915#15573]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15573
[i915#15574]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15574
[i915#1825]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1825
[i915#2527]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2527
[i915#2672]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2672
[i915#2856]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2856
[i915#3023]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3023
[i915#3116]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3116
[i915#3281]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3281
[i915#3282]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3282
[i915#3297]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3297
[i915#3458]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3458
[i915#3469]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3469
[i915#3539]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3539
[i915#3555]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3555
[i915#3637]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3637
[i915#3638]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3638
[i915#3708]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3708
[i915#3778]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3778
[i915#3828]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3828
[i915#3840]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3840
[i915#4077]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4077
[i915#4079]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4079
[i915#4103]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4103
[i915#4349]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4349
[i915#4423]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4423
[i915#4525]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4525
[i915#4538]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4538
[i915#4613]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4613
[i915#4812]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4812
[i915#4817]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4817
[i915#4839]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4839
[i915#4852]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4852
[i915#5138]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5138
[i915#5190]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5190
[i915#5286]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5286
[i915#5289]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5289
[i915#5354]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5354
[i915#5566]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5566
[i915#6095]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6095
[i915#6113]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6113
[i915#6301]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6301
[i915#6412]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6412
[i915#6524]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6524
[i915#6944]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6944
[i915#7118]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7118
[i915#7173]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7173
[i915#7443]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7443
[i915#7828]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7828
[i915#7862]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7862
[i915#7984]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7984
[i915#8228]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8228
[i915#8411]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8411
[i915#8428]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8428
[i915#8555]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8555
[i915#8708]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8708
[i915#9340]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9340
[i915#9424]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9424
[i915#9732]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9732
[i915#9878]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9878
[i915#9906]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9906
[i915#9917]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9917
[i915#9934]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9934
Build changes
-------------
* Linux: CI_DRM_17884 -> Patchwork_160638v1
CI-20190529: 20190529
CI_DRM_17884: a1e0224c47409e3c48cfc55a7db0321d22dc343e @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_8717: 8717
Patchwork_160638v1: a1e0224c47409e3c48cfc55a7db0321d22dc343e @ git://anongit.freedesktop.org/gfx-ci/linux
piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_160638v1/index.html
[-- Attachment #2: Type: text/html, Size: 91479 bytes --]
^ permalink raw reply [flat|nested] 13+ 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; 13+ 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] 13+ 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; 13+ 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] 13+ 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; 13+ 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] 13+ 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; 13+ 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] 13+ 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; 13+ 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] 13+ messages in thread
end of thread, other threads:[~2026-01-26 21:13 UTC | newest]
Thread overview: 13+ 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 14:26 ` ✓ i915.CI.BAT: success for drm/xe: Privatize struct xe_ggtt Patchwork
2026-01-26 18:16 ` ✗ i915.CI.Full: failure " Patchwork
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox