Intel-XE Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 00/13] drm/i915/dpt: Optimize i915 DPT
@ 2026-11-11 11:19 Ville Syrjala
  2026-11-11 11:19 ` [PATCH 01/13] drm/i915: Bump surface alignment to 32k on MTL for async flips Ville Syrjala
                   ` (16 more replies)
  0 siblings, 17 replies; 20+ messages in thread
From: Ville Syrjala @ 2026-11-11 11:19 UTC (permalink / raw)
  To: intel-gfx; +Cc: intel-xe

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

My original i915 DPT implementation has one annoying performance
flaw. It creates a new DPT for every new framebuffers, which
given your typical dumb userspace implementation happens every
single frame. The intel ddx might be the only userspace implementation
with a userspace side cache of framebuffers, but the intel ddx
does not even support any platform with DPT, so not relevant
here.

Take a page out of the i915 vma book and cache the DPTs in the 
gem object instead. This way the same DPT will get reused as
long as userspace keeps rotating through the same set of gem 
objects (which is the case).

As a bonus the whole DPT parent interface disappears from the
display side.

Ville Syrjälä (13):
  drm/i915: Bump surface alignment to 32k on MTL for async flips
  drm/i915/fb: Fix error handling onion in intel_framebuffer_init()
  drm/i915/dpt: Stop allocation DPTs from stolen
  drm/i915/fb_pin: Remove overzealous vma NULL checks
  drm/i915: intel_{remapped,rotation}_info_size() into
    intel/gtt_view_types.h
  drm/i915/dpt: Compute DPT size in the DPT code
  drm/i915/vma: Extract intel_gtt_view_compare()
  drm/i915/vma: Introduce i915_vma_lookup()
  drm/i915/dpt: Make i915_dpt_{suspend,resume}() internal to i915
  drm/i915/dpt: Cache DPTs in the gem object
  drm/i915/dpt: Hide the DPT even more from the display code
  drm/i915/dpt: Remove dpt->vma
  drm/i915/dpt: s/struct intel_dpt/struct i915_dpt/

 .../drm/i915/display/intel_display_driver.c   |   2 +-
 .../drm/i915/display/intel_display_types.h    |   3 -
 drivers/gpu/drm/i915/display/intel_dpt.c      |  58 -----
 drivers/gpu/drm/i915/display/intel_dpt.h      |   2 -
 drivers/gpu/drm/i915/display/intel_fb.c       |  64 +----
 drivers/gpu/drm/i915/display/intel_fb.h       |   3 -
 drivers/gpu/drm/i915/display/intel_parent.c   |  40 +--
 drivers/gpu/drm/i915/display/intel_parent.h   |  14 +-
 drivers/gpu/drm/i915/display/intel_plane.c    |  13 +-
 .../drm/i915/display/skl_universal_plane.c    |   9 +
 drivers/gpu/drm/i915/gem/i915_gem_object.c    |   6 +
 .../gpu/drm/i915/gem/i915_gem_object_types.h  |   6 +
 drivers/gpu/drm/i915/gt/intel_ggtt.c          |  10 +
 drivers/gpu/drm/i915/gt/intel_gtt.h           |   4 +
 drivers/gpu/drm/i915/i915_dpt.c               | 233 ++++++++++++++----
 drivers/gpu/drm/i915/i915_dpt.h               |  21 +-
 drivers/gpu/drm/i915/i915_driver.c            |   8 -
 drivers/gpu/drm/i915/i915_fb_pin.c            |  56 +++--
 drivers/gpu/drm/i915/i915_vma.c               |  42 +++-
 drivers/gpu/drm/i915/i915_vma.h               |  49 ++--
 drivers/gpu/drm/xe/display/xe_fb_pin.c        |  15 +-
 drivers/gpu/drm/xe/display/xe_initial_plane.c |   3 +-
 include/drm/intel/display_parent_interface.h  |  17 +-
 include/drm/intel/gtt_view_types.h            |  38 +++
 24 files changed, 400 insertions(+), 316 deletions(-)

-- 
2.56.0


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [PATCH 01/13] drm/i915: Bump surface alignment to 32k on MTL for async flips
  2026-11-11 11:19 [PATCH 00/13] drm/i915/dpt: Optimize i915 DPT Ville Syrjala
@ 2026-11-11 11:19 ` Ville Syrjala
  2026-11-11 11:19 ` [PATCH 02/13] drm/i915/fb: Fix error handling onion in intel_framebuffer_init() Ville Syrjala
                   ` (15 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: Ville Syrjala @ 2026-11-11 11:19 UTC (permalink / raw)
  To: intel-gfx; +Cc: intel-xe, stable

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

MTL is seeing tons of GTT/ATS faults on async flips. Bump the
alignment to 32k to work around the issue. The magic number
was determined empirically. We already have a similar
workaround for ADL, but there we only needed 16k alignment.

I looked at this case already some time ago, but didn't really
manage to root cause it. It seems to be a bit more nuanced than
a simple "always need this much alignment" because IIRC I was
also able to work around by adding some guard pages around
the DPT mapping in the GGTT while leaving PLANE_SURF itself
still misaligned. So maybe some kind of prefetch thing or
something...

Cc: stable@vger.kernel.org
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/display/skl_universal_plane.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/drivers/gpu/drm/i915/display/skl_universal_plane.c b/drivers/gpu/drm/i915/display/skl_universal_plane.c
index def4798f8502..667abfc31464 100644
--- a/drivers/gpu/drm/i915/display/skl_universal_plane.c
+++ b/drivers/gpu/drm/i915/display/skl_universal_plane.c
@@ -591,6 +591,15 @@ static u32 tgl_plane_min_alignment(struct intel_plane *plane,
 	if (intel_fb_is_ccs_aux_plane(fb, color_plane))
 		return mult * 4 * 1024;
 
+	/*
+	 * FIXME MTL sees GGTT/ATS faults with async
+	 * flips unless we align to 32k at least.
+	 * Figure out what's going on here...
+	 */
+	if (display->platform.meteorlake &&
+	    intel_plane_can_async_flip(plane, fb->format, fb->modifier))
+		return mult * 32 * 1024;
+
 	/*
 	 * FIXME ADL sees GGTT/DMAR faults with async
 	 * flips unless we align to 16k at least.
-- 
2.56.0


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 02/13] drm/i915/fb: Fix error handling onion in intel_framebuffer_init()
  2026-11-11 11:19 [PATCH 00/13] drm/i915/dpt: Optimize i915 DPT Ville Syrjala
  2026-11-11 11:19 ` [PATCH 01/13] drm/i915: Bump surface alignment to 32k on MTL for async flips Ville Syrjala
@ 2026-11-11 11:19 ` Ville Syrjala
  2026-11-11 11:19 ` [PATCH 03/13] drm/i915/dpt: Stop allocation DPTs from stolen Ville Syrjala
                   ` (14 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: Ville Syrjala @ 2026-11-11 11:19 UTC (permalink / raw)
  To: intel-gfx; +Cc: intel-xe

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Correctly unwind the steps in intel_framebuffer_init()
if we fail to create the DPT.

Fixes: 86af6b90e055 ("drm/i915/fb: Fix the set_tiling vs. addfb race, again")
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_fb.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/display/intel_fb.c b/drivers/gpu/drm/i915/display/intel_fb.c
index 9d71f594537f..40012b432d91 100644
--- a/drivers/gpu/drm/i915/display/intel_fb.c
+++ b/drivers/gpu/drm/i915/display/intel_fb.c
@@ -2319,7 +2319,7 @@ int intel_framebuffer_init(struct intel_framebuffer *intel_fb,
 		if (IS_ERR(dpt)) {
 			drm_dbg_kms(display->drm, "failed to create DPT\n");
 			ret = PTR_ERR(dpt);
-			goto err_frontbuffer_put;
+			goto err_bo_framebuffer_fini;
 		}
 
 		intel_fb->dpt = dpt;
-- 
2.56.0


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 03/13] drm/i915/dpt: Stop allocation DPTs from stolen
  2026-11-11 11:19 [PATCH 00/13] drm/i915/dpt: Optimize i915 DPT Ville Syrjala
  2026-11-11 11:19 ` [PATCH 01/13] drm/i915: Bump surface alignment to 32k on MTL for async flips Ville Syrjala
  2026-11-11 11:19 ` [PATCH 02/13] drm/i915/fb: Fix error handling onion in intel_framebuffer_init() Ville Syrjala
@ 2026-11-11 11:19 ` Ville Syrjala
  2026-11-11 11:19 ` [PATCH 04/13] drm/i915/fb_pin: Remove overzealous vma NULL checks Ville Syrjala
                   ` (13 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: Ville Syrjala @ 2026-11-11 11:19 UTC (permalink / raw)
  To: intel-gfx; +Cc: intel-xe

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

The original purpose for the DPT stolen memory usage was just so
I could sort of test the dGPU path (as far as the iomap is concerned)
without actually having a dGPU. Now it has long lived past its
usefulness.

Fragmenting stolen with DPTs may cause larger, important stolen
allocations (namely FBC) to fail. This will cost power.

Stop allocating DPTs from stolen, and just always use shmem for
iGPUs. This was already done for xe, but i915 was left unchanged for
whatever reason.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/i915_dpt.c | 9 +++------
 1 file changed, 3 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_dpt.c b/drivers/gpu/drm/i915/i915_dpt.c
index 85d872c0f387..6daf75c3eb49 100644
--- a/drivers/gpu/drm/i915/i915_dpt.c
+++ b/drivers/gpu/drm/i915/i915_dpt.c
@@ -192,13 +192,10 @@ static struct intel_dpt *i915_dpt_create(struct drm_gem_object *obj, size_t size
 
 	size = round_up(size * sizeof(gen8_pte_t), I915_GTT_PAGE_SIZE);
 
-	dpt_obj = i915_gem_object_create_lmem(i915, size, I915_BO_ALLOC_CONTIGUOUS);
-	if (IS_ERR(dpt_obj) && i915_ggtt_has_aperture(to_gt(i915)->ggtt))
-		dpt_obj = i915_gem_object_create_stolen(i915, size);
-	if (IS_ERR(dpt_obj) && !HAS_LMEM(i915)) {
-		drm_dbg_kms(&i915->drm, "Allocating dpt from smem\n");
+	if (HAS_LMEM(i915))
+		dpt_obj = i915_gem_object_create_lmem(i915, size, I915_BO_ALLOC_CONTIGUOUS);
+	else
 		dpt_obj = i915_gem_object_create_shmem(i915, size);
-	}
 	if (IS_ERR(dpt_obj))
 		return ERR_CAST(dpt_obj);
 
-- 
2.56.0


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 04/13] drm/i915/fb_pin: Remove overzealous vma NULL checks
  2026-11-11 11:19 [PATCH 00/13] drm/i915/dpt: Optimize i915 DPT Ville Syrjala
                   ` (2 preceding siblings ...)
  2026-11-11 11:19 ` [PATCH 03/13] drm/i915/dpt: Stop allocation DPTs from stolen Ville Syrjala
@ 2026-11-11 11:19 ` Ville Syrjala
  2026-11-11 11:19 ` [PATCH 05/13] drm/i915: intel_{remapped, rotation}_info_size() into intel/gtt_view_types.h Ville Syrjala
                   ` (12 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: Ville Syrjala @ 2026-11-11 11:19 UTC (permalink / raw)
  To: intel-gfx; +Cc: intel-xe

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Remove the unnecessary NULL checks from the unpin functions.
The pin and unpin are always expected to be balanced.

The idea of these checks probably predates
commit 58fa1760d08a ("drm/i915: Balance prepare_fb/cleanup_fb")
when we perhaps did have the real possibility of NULL vmas.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/i915_fb_pin.c | 12 +++---------
 1 file changed, 3 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_fb_pin.c b/drivers/gpu/drm/i915/i915_fb_pin.c
index 63be136f1a05..b5672b2cf5bd 100644
--- a/drivers/gpu/drm/i915/i915_fb_pin.c
+++ b/drivers/gpu/drm/i915/i915_fb_pin.c
@@ -244,8 +244,7 @@ static int i915_fb_pin_ggtt_pin(struct drm_gem_object *obj,
 static void i915_fb_pin_ggtt_unpin(struct i915_vma *ggtt_vma,
 				   int fence_id)
 {
-	if (ggtt_vma)
-		intel_fb_unpin_vma(ggtt_vma, fence_id);
+	intel_fb_unpin_vma(ggtt_vma, fence_id);
 }
 
 static int i915_fb_pin_dpt_pin(struct drm_gem_object *obj, struct intel_dpt *dpt,
@@ -282,13 +281,8 @@ static void i915_fb_pin_dpt_unpin(struct intel_dpt *dpt,
 				  struct i915_vma *dpt_vma,
 				  struct i915_vma *ggtt_vma)
 {
-	WARN_ON(!dpt);
-	WARN_ON(!!dpt_vma != !!ggtt_vma);
-
-	if (dpt_vma)
-		intel_fb_unpin_vma(dpt_vma, -1);
-	if (ggtt_vma)
-		i915_dpt_unpin_from_ggtt(dpt);
+	intel_fb_unpin_vma(dpt_vma, -1);
+	i915_dpt_unpin_from_ggtt(dpt);
 }
 
 static void i915_fb_pin_get_map(struct i915_vma *vma, struct iosys_map *map)
-- 
2.56.0


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 05/13] drm/i915: intel_{remapped, rotation}_info_size() into intel/gtt_view_types.h
  2026-11-11 11:19 [PATCH 00/13] drm/i915/dpt: Optimize i915 DPT Ville Syrjala
                   ` (3 preceding siblings ...)
  2026-11-11 11:19 ` [PATCH 04/13] drm/i915/fb_pin: Remove overzealous vma NULL checks Ville Syrjala
@ 2026-11-11 11:19 ` Ville Syrjala
  2026-11-11 11:20 ` [PATCH 06/13] drm/i915/dpt: Compute DPT size in the DPT code Ville Syrjala
                   ` (11 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: Ville Syrjala @ 2026-11-11 11:19 UTC (permalink / raw)
  To: intel-gfx; +Cc: intel-xe

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

intel_remapped_info_size() and intel_rotation_info_size() operate
on intel_gtt_view, and need to be shared across driver boundaries.
Move them into the appropriate header as static inlines. While
static inlines are a bit icky these functions don't really depend
on anything and just do some basic arithmetic, so not the end
of the world.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_fb.c       | 38 +------------------
 drivers/gpu/drm/i915/display/intel_fb.h       |  3 --
 drivers/gpu/drm/i915/i915_vma.c               |  3 +-
 drivers/gpu/drm/xe/display/xe_fb_pin.c        |  3 --
 drivers/gpu/drm/xe/display/xe_initial_plane.c |  3 +-
 include/drm/intel/gtt_view_types.h            | 38 +++++++++++++++++++
 6 files changed, 44 insertions(+), 44 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_fb.c b/drivers/gpu/drm/i915/display/intel_fb.c
index 40012b432d91..b3344e3f187f 100644
--- a/drivers/gpu/drm/i915/display/intel_fb.c
+++ b/drivers/gpu/drm/i915/display/intel_fb.c
@@ -11,6 +11,8 @@
 #include <drm/drm_modeset_helper.h>
 #include <drm/drm_print.h>
 
+#include <drm/intel/gtt_view_types.h>
+
 #include "intel_bo.h"
 #include "intel_display.h"
 #include "intel_display_core.h"
@@ -1895,42 +1897,6 @@ static void intel_plane_remap_gtt(struct intel_plane_state *plane_state)
 	}
 }
 
-unsigned int intel_rotation_info_size(const struct intel_rotation_info *rot_info)
-{
-	unsigned int size = 0;
-	int i;
-
-	for (i = 0 ; i < ARRAY_SIZE(rot_info->plane); i++)
-		size += rot_info->plane[i].dst_stride * rot_info->plane[i].width;
-
-	return size;
-}
-
-unsigned int intel_remapped_info_size(const struct intel_remapped_info *rem_info)
-{
-	unsigned int size = 0;
-	int i;
-
-	for (i = 0 ; i < ARRAY_SIZE(rem_info->plane); i++) {
-		unsigned int plane_size;
-
-		if (rem_info->plane[i].linear)
-			plane_size = rem_info->plane[i].size;
-		else
-			plane_size = rem_info->plane[i].dst_stride * rem_info->plane[i].height;
-
-		if (plane_size == 0)
-			continue;
-
-		if (rem_info->plane_alignment)
-			size = ALIGN(size, rem_info->plane_alignment);
-
-		size += plane_size;
-	}
-
-	return size;
-}
-
 void intel_fb_fill_view(const struct intel_framebuffer *fb, unsigned int rotation,
 			struct intel_fb_view *view)
 {
diff --git a/drivers/gpu/drm/i915/display/intel_fb.h b/drivers/gpu/drm/i915/display/intel_fb.h
index 0a027e2595b2..161899308ecf 100644
--- a/drivers/gpu/drm/i915/display/intel_fb.h
+++ b/drivers/gpu/drm/i915/display/intel_fb.h
@@ -81,9 +81,6 @@ u32 intel_plane_compute_aligned_offset(int *x, int *y,
 bool intel_plane_uses_fence(const struct intel_plane_state *plane_state);
 bool intel_fb_supports_90_270_rotation(const struct intel_framebuffer *fb);
 
-unsigned int intel_rotation_info_size(const struct intel_rotation_info *rot_info);
-unsigned int intel_remapped_info_size(const struct intel_remapped_info *rem_info);
-
 int intel_fill_fb_info(struct intel_display *display, struct intel_framebuffer *fb);
 void intel_fb_fill_view(const struct intel_framebuffer *fb, unsigned int rotation,
 			struct intel_fb_view *view);
diff --git a/drivers/gpu/drm/i915/i915_vma.c b/drivers/gpu/drm/i915/i915_vma.c
index 16782d8579a8..52f82772a1c0 100644
--- a/drivers/gpu/drm/i915/i915_vma.c
+++ b/drivers/gpu/drm/i915/i915_vma.c
@@ -28,7 +28,8 @@
 #include <drm/drm_gem.h>
 #include <drm/drm_print.h>
 
-#include "display/intel_fb.h"
+#include <drm/intel/gtt_view_types.h>
+
 #include "display/intel_frontbuffer.h"
 #include "gem/i915_gem_lmem.h"
 #include "gem/i915_gem_object_frontbuffer.h"
diff --git a/drivers/gpu/drm/xe/display/xe_fb_pin.c b/drivers/gpu/drm/xe/display/xe_fb_pin.c
index 1bb484254d6e..8df844120ea8 100644
--- a/drivers/gpu/drm/xe/display/xe_fb_pin.c
+++ b/drivers/gpu/drm/xe/display/xe_fb_pin.c
@@ -7,9 +7,6 @@
 #include <drm/intel/gtt_view_types.h>
 #include <drm/ttm/ttm_bo.h>
 
-/* FIXME move intel_remapped_info_size() & co. to parent interface? */
-#include "intel_fb.h"
-
 #include "xe_bo.h"
 #include "xe_device.h"
 #include "xe_display_vma.h"
diff --git a/drivers/gpu/drm/xe/display/xe_initial_plane.c b/drivers/gpu/drm/xe/display/xe_initial_plane.c
index 0f86b73036d0..d0c1fbca1611 100644
--- a/drivers/gpu/drm/xe/display/xe_initial_plane.c
+++ b/drivers/gpu/drm/xe/display/xe_initial_plane.c
@@ -4,10 +4,11 @@
  */
 
 #include <drm/intel/display_parent_interface.h>
+#include <drm/intel/gtt_view_types.h>
 
 #include "regs/xe_gtt_defs.h"
 
-/* FIXME move intel_remapped_info_size() & co. */
+/* FIXME move intel_framebuffer_init() out */
 #include "intel_fb.h"
 
 /* FIXME move intel_initial_plane_config */
diff --git a/include/drm/intel/gtt_view_types.h b/include/drm/intel/gtt_view_types.h
index 128392d98f3a..a19f67060966 100644
--- a/include/drm/intel/gtt_view_types.h
+++ b/include/drm/intel/gtt_view_types.h
@@ -4,6 +4,8 @@
 #ifndef __DRM_INTEL_GTT_VIEW_TYPES_H__
 #define __DRM_INTEL_GTT_VIEW_TYPES_H__
 
+#include <linux/align.h>
+#include <linux/array_size.h>
 #include <linux/types.h>
 
 struct intel_remapped_plane_info {
@@ -76,4 +78,40 @@ static inline bool intel_gtt_view_is_partial(const struct intel_gtt_view *view)
 	return view->type == INTEL_GTT_VIEW_PARTIAL;
 }
 
+static inline unsigned int intel_rotation_info_size(const struct intel_rotation_info *rot_info)
+{
+	unsigned int size = 0;
+	int i;
+
+	for (i = 0 ; i < ARRAY_SIZE(rot_info->plane); i++)
+		size += rot_info->plane[i].dst_stride * rot_info->plane[i].width;
+
+	return size;
+}
+
+static inline unsigned int intel_remapped_info_size(const struct intel_remapped_info *rem_info)
+{
+	unsigned int size = 0;
+	int i;
+
+	for (i = 0 ; i < ARRAY_SIZE(rem_info->plane); i++) {
+		unsigned int plane_size;
+
+		if (rem_info->plane[i].linear)
+			plane_size = rem_info->plane[i].size;
+		else
+			plane_size = rem_info->plane[i].dst_stride * rem_info->plane[i].height;
+
+		if (plane_size == 0)
+			continue;
+
+		if (rem_info->plane_alignment)
+			size = ALIGN(size, rem_info->plane_alignment);
+
+		size += plane_size;
+	}
+
+	return size;
+}
+
 #endif /* __DRM_INTEL_GTT_VIEW_TYPES_H__ */
-- 
2.56.0


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 06/13] drm/i915/dpt: Compute DPT size in the DPT code
  2026-11-11 11:19 [PATCH 00/13] drm/i915/dpt: Optimize i915 DPT Ville Syrjala
                   ` (4 preceding siblings ...)
  2026-11-11 11:19 ` [PATCH 05/13] drm/i915: intel_{remapped, rotation}_info_size() into intel/gtt_view_types.h Ville Syrjala
@ 2026-11-11 11:20 ` Ville Syrjala
  2026-11-11 11:31   ` sashiko-bot
  2026-11-11 11:20 ` [PATCH 07/13] drm/i915/vma: Extract intel_gtt_view_compare() Ville Syrjala
                   ` (10 subsequent siblings)
  16 siblings, 1 reply; 20+ messages in thread
From: Ville Syrjala @ 2026-11-11 11:20 UTC (permalink / raw)
  To: intel-gfx; +Cc: intel-xe

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Get rid of the weird division of labor where the DPT code
calculates the DPT size for normal views, and the fb code
calculates it for remapped views. Just do it in the DPT
code every time.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_fb.c      |  8 +++++---
 drivers/gpu/drm/i915/display/intel_parent.c  |  5 +++--
 drivers/gpu/drm/i915/display/intel_parent.h  |  3 ++-
 drivers/gpu/drm/i915/i915_dpt.c              | 10 ++++++++--
 include/drm/intel/display_parent_interface.h |  3 ++-
 5 files changed, 20 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_fb.c b/drivers/gpu/drm/i915/display/intel_fb.c
index b3344e3f187f..35f1d5dd31d7 100644
--- a/drivers/gpu/drm/i915/display/intel_fb.c
+++ b/drivers/gpu/drm/i915/display/intel_fb.c
@@ -2275,13 +2275,15 @@ int intel_framebuffer_init(struct intel_framebuffer *intel_fb,
 
 	if (intel_fb_uses_dpt(fb)) {
 		struct drm_gem_object *obj = intel_fb_bo(&intel_fb->base);
+		const struct intel_gtt_view *view;
 		struct intel_dpt *dpt;
-		size_t size = 0;
 
 		if (intel_fb_needs_pot_stride_remap(intel_fb))
-			size = intel_remapped_info_size(&intel_fb->remapped_view.gtt.remapped);
+			view = &intel_fb->remapped_view.gtt;
+		else
+			view = &intel_fb->normal_view.gtt;
 
-		dpt = intel_parent_dpt_create(display, obj, size);
+		dpt = intel_parent_dpt_create(display, obj, view);
 		if (IS_ERR(dpt)) {
 			drm_dbg_kms(display->drm, "failed to create DPT\n");
 			ret = PTR_ERR(dpt);
diff --git a/drivers/gpu/drm/i915/display/intel_parent.c b/drivers/gpu/drm/i915/display/intel_parent.c
index ed3e21b0a927..e9609c29997e 100644
--- a/drivers/gpu/drm/i915/display/intel_parent.c
+++ b/drivers/gpu/drm/i915/display/intel_parent.c
@@ -26,10 +26,11 @@
 
 /* dpt */
 struct intel_dpt *intel_parent_dpt_create(struct intel_display *display,
-					  struct drm_gem_object *obj, size_t size)
+					  struct drm_gem_object *obj,
+					  const struct intel_gtt_view *view)
 {
 	if (display->parent->dpt)
-		return display->parent->dpt->create(obj, size);
+		return display->parent->dpt->create(obj, view);
 
 	return NULL;
 }
diff --git a/drivers/gpu/drm/i915/display/intel_parent.h b/drivers/gpu/drm/i915/display/intel_parent.h
index 923cb6464a98..3d0959d67727 100644
--- a/drivers/gpu/drm/i915/display/intel_parent.h
+++ b/drivers/gpu/drm/i915/display/intel_parent.h
@@ -24,7 +24,8 @@ struct iosys_map;
 
 /* dpt */
 struct intel_dpt *intel_parent_dpt_create(struct intel_display *display,
-					  struct drm_gem_object *obj, size_t size);
+					  struct drm_gem_object *obj,
+					  const struct intel_gtt_view *view);
 void intel_parent_dpt_destroy(struct intel_display *display, struct intel_dpt *dpt);
 void intel_parent_dpt_suspend(struct intel_display *display, struct intel_dpt *dpt);
 void intel_parent_dpt_resume(struct intel_display *display, struct intel_dpt *dpt);
diff --git a/drivers/gpu/drm/i915/i915_dpt.c b/drivers/gpu/drm/i915/i915_dpt.c
index 6daf75c3eb49..96bcffc38d3c 100644
--- a/drivers/gpu/drm/i915/i915_dpt.c
+++ b/drivers/gpu/drm/i915/i915_dpt.c
@@ -179,16 +179,22 @@ void i915_dpt_unpin_from_ggtt(struct intel_dpt *dpt)
 	i915_vma_put(dpt->vma);
 }
 
-static struct intel_dpt *i915_dpt_create(struct drm_gem_object *obj, size_t size)
+static struct intel_dpt *i915_dpt_create(struct drm_gem_object *obj,
+					 const struct intel_gtt_view *view)
 {
 	struct drm_i915_private *i915 = to_i915(obj->dev);
 	struct drm_i915_gem_object *dpt_obj;
 	struct i915_address_space *vm;
 	struct intel_dpt *dpt;
+	size_t size;
 	int ret;
 
-	if (!size)
+	if (intel_gtt_view_is_remapped(view)) {
+		size = intel_remapped_info_size(&view->remapped);
+	} else {
+		drm_WARN_ON(&i915->drm, !intel_gtt_view_is_normal(view));
 		size = DIV_ROUND_UP_ULL(obj->size, I915_GTT_PAGE_SIZE);
+	}
 
 	size = round_up(size * sizeof(gen8_pte_t), I915_GTT_PAGE_SIZE);
 
diff --git a/include/drm/intel/display_parent_interface.h b/include/drm/intel/display_parent_interface.h
index 464fb588cb60..33d29d061373 100644
--- a/include/drm/intel/display_parent_interface.h
+++ b/include/drm/intel/display_parent_interface.h
@@ -66,7 +66,8 @@ struct intel_display_bo_interface {
 };
 
 struct intel_display_dpt_interface {
-	struct intel_dpt *(*create)(struct drm_gem_object *obj, size_t size);
+	struct intel_dpt *(*create)(struct drm_gem_object *obj,
+				    const struct intel_gtt_view *view);
 	void (*destroy)(struct intel_dpt *dpt);
 	void (*suspend)(struct intel_dpt *dpt);
 	void (*resume)(struct intel_dpt *dpt);
-- 
2.56.0


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 07/13] drm/i915/vma: Extract intel_gtt_view_compare()
  2026-11-11 11:19 [PATCH 00/13] drm/i915/dpt: Optimize i915 DPT Ville Syrjala
                   ` (5 preceding siblings ...)
  2026-11-11 11:20 ` [PATCH 06/13] drm/i915/dpt: Compute DPT size in the DPT code Ville Syrjala
@ 2026-11-11 11:20 ` Ville Syrjala
  2026-11-11 11:20 ` [PATCH 08/13] drm/i915/vma: Introduce i915_vma_lookup() Ville Syrjala
                   ` (9 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: Ville Syrjala @ 2026-11-11 11:20 UTC (permalink / raw)
  To: intel-gfx; +Cc: intel-xe

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Split intel_gtt_view_compare() out from i915_vma_compare().
We'll soon need to compare gtt views in the DPT code without
vmas being present.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/i915_vma.h | 44 ++++++++++++++++++++-------------
 1 file changed, 27 insertions(+), 17 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_vma.h b/drivers/gpu/drm/i915/i915_vma.h
index b0aca10bf8e7..85c2408f1823 100644
--- a/drivers/gpu/drm/i915/i915_vma.h
+++ b/drivers/gpu/drm/i915/i915_vma.h
@@ -204,25 +204,19 @@ static inline void i915_vma_put(struct i915_vma *vma)
 	i915_gem_object_put(vma->obj);
 }
 
+/* a is never NULL, b may be NULL (assumed normal view) or not */
 static inline long
-i915_vma_compare(struct i915_vma *vma,
-		 struct i915_address_space *vm,
-		 const struct intel_gtt_view *view)
+intel_gtt_view_compare(const struct intel_gtt_view *a,
+		       const struct intel_gtt_view *b)
 {
 	ptrdiff_t cmp;
 
-	GEM_BUG_ON(view && !i915_is_ggtt_or_dpt(vm));
-
-	cmp = ptrdiff(vma->vm, vm);
-	if (cmp)
-		return cmp;
-
 	BUILD_BUG_ON(INTEL_GTT_VIEW_NORMAL != 0);
-	cmp = vma->gtt_view.type;
-	if (!view)
+	cmp = a->type;
+	if (!b)
 		return cmp;
 
-	cmp -= view->type;
+	cmp -= b->type;
 	if (cmp)
 		return cmp;
 
@@ -241,11 +235,27 @@ i915_vma_compare(struct i915_vma *vma,
 	BUILD_BUG_ON(INTEL_GTT_VIEW_NORMAL >= INTEL_GTT_VIEW_PARTIAL);
 	BUILD_BUG_ON(INTEL_GTT_VIEW_PARTIAL >= INTEL_GTT_VIEW_ROTATED);
 	BUILD_BUG_ON(INTEL_GTT_VIEW_ROTATED >= INTEL_GTT_VIEW_REMAPPED);
-	BUILD_BUG_ON(offsetof(typeof(*view), rotated) !=
-		     offsetof(typeof(*view), partial));
-	BUILD_BUG_ON(offsetof(typeof(*view), rotated) !=
-		     offsetof(typeof(*view), remapped));
-	return memcmp(&vma->gtt_view.partial, &view->partial, view->type);
+	BUILD_BUG_ON(offsetof(typeof(*b), rotated) !=
+		     offsetof(typeof(*b), partial));
+	BUILD_BUG_ON(offsetof(typeof(*b), rotated) !=
+		     offsetof(typeof(*b), remapped));
+	return memcmp(&a->partial, &b->partial, b->type);
+}
+
+static inline long
+i915_vma_compare(struct i915_vma *vma,
+		 struct i915_address_space *vm,
+		 const struct intel_gtt_view *view)
+{
+	ptrdiff_t cmp;
+
+	GEM_BUG_ON(view && !i915_is_ggtt_or_dpt(vm));
+
+	cmp = ptrdiff(vma->vm, vm);
+	if (cmp)
+		return cmp;
+
+	return intel_gtt_view_compare(&vma->gtt_view, view);
 }
 
 struct i915_vma_work *i915_vma_work(void);
-- 
2.56.0


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 08/13] drm/i915/vma: Introduce i915_vma_lookup()
  2026-11-11 11:19 [PATCH 00/13] drm/i915/dpt: Optimize i915 DPT Ville Syrjala
                   ` (6 preceding siblings ...)
  2026-11-11 11:20 ` [PATCH 07/13] drm/i915/vma: Extract intel_gtt_view_compare() Ville Syrjala
@ 2026-11-11 11:20 ` Ville Syrjala
  2026-11-11 11:20 ` [PATCH 09/13] drm/i915/dpt: Make i915_dpt_{suspend, resume}() internal to i915 Ville Syrjala
                   ` (8 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: Ville Syrjala @ 2026-11-11 11:20 UTC (permalink / raw)
  To: intel-gfx; +Cc: intel-xe

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Expose a "lookup only" variant of i915_vma_instance()
(which will create the vma if it didn't exist before)
as i915_vma_lookup(). This can be used when we know that
the vma must already exists (eg. it's currently pinned).
Not magically creating the vma if we screw up badly could
help with catching the bug earlier.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/i915_vma.c | 39 ++++++++++++++++++++++++++-------
 drivers/gpu/drm/i915/i915_vma.h |  5 +++++
 2 files changed, 36 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_vma.c b/drivers/gpu/drm/i915/i915_vma.c
index 52f82772a1c0..daf933036ce0 100644
--- a/drivers/gpu/drm/i915/i915_vma.c
+++ b/drivers/gpu/drm/i915/i915_vma.c
@@ -285,9 +285,9 @@ vma_create(struct drm_i915_gem_object *obj,
 }
 
 static struct i915_vma *
-i915_vma_lookup(struct drm_i915_gem_object *obj,
-	   struct i915_address_space *vm,
-	   const struct intel_gtt_view *view)
+__i915_vma_lookup(struct drm_i915_gem_object *obj,
+		  struct i915_address_space *vm,
+		  const struct intel_gtt_view *view)
 {
 	struct rb_node *rb;
 
@@ -309,6 +309,34 @@ i915_vma_lookup(struct drm_i915_gem_object *obj,
 	return NULL;
 }
 
+/**
+ * i915_vma_lookup - return the singleton instance of the VMA if it exists
+ * @obj: parent &struct drm_i915_gem_object to be mapped
+ * @vm: address space in which the mapping is located
+ * @view: additional mapping requirements
+ *
+ * i915_vma_lookup() look up an existinbg VMA of the @obj in the @vm with
+ * the same @view characteristics. If no match is not found NULL is returned.
+ *
+ * Returns the vma, or NULL.
+ */
+struct i915_vma *
+i915_vma_lookup(struct drm_i915_gem_object *obj,
+		struct i915_address_space *vm,
+		const struct intel_gtt_view *view)
+{
+	struct i915_vma *vma;
+
+	GEM_BUG_ON(view && !i915_is_ggtt_or_dpt(vm));
+	GEM_BUG_ON(!kref_read(&vm->ref));
+
+	spin_lock(&obj->vma.lock);
+	vma = __i915_vma_lookup(obj, vm, view);
+	spin_unlock(&obj->vma.lock);
+
+	return vma;
+}
+
 /**
  * i915_vma_instance - return the singleton instance of the VMA
  * @obj: parent &struct drm_i915_gem_object to be mapped
@@ -329,12 +357,7 @@ i915_vma_instance(struct drm_i915_gem_object *obj,
 {
 	struct i915_vma *vma;
 
-	GEM_BUG_ON(view && !i915_is_ggtt_or_dpt(vm));
-	GEM_BUG_ON(!kref_read(&vm->ref));
-
-	spin_lock(&obj->vma.lock);
 	vma = i915_vma_lookup(obj, vm, view);
-	spin_unlock(&obj->vma.lock);
 
 	/* vma_create() will resolve the race if another creates the vma */
 	if (unlikely(!vma))
diff --git a/drivers/gpu/drm/i915/i915_vma.h b/drivers/gpu/drm/i915/i915_vma.h
index 85c2408f1823..5327cafa6edb 100644
--- a/drivers/gpu/drm/i915/i915_vma.h
+++ b/drivers/gpu/drm/i915/i915_vma.h
@@ -45,6 +45,11 @@ i915_vma_instance(struct drm_i915_gem_object *obj,
 		  struct i915_address_space *vm,
 		  const struct intel_gtt_view *view);
 
+struct i915_vma *
+i915_vma_lookup(struct drm_i915_gem_object *obj,
+		struct i915_address_space *vm,
+		const struct intel_gtt_view *view);
+
 void i915_vma_unpin_and_release(struct i915_vma **p_vma, unsigned int flags);
 #define I915_VMA_RELEASE_MAP BIT(0)
 
-- 
2.56.0


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 09/13] drm/i915/dpt: Make i915_dpt_{suspend, resume}() internal to i915
  2026-11-11 11:19 [PATCH 00/13] drm/i915/dpt: Optimize i915 DPT Ville Syrjala
                   ` (7 preceding siblings ...)
  2026-11-11 11:20 ` [PATCH 08/13] drm/i915/vma: Introduce i915_vma_lookup() Ville Syrjala
@ 2026-11-11 11:20 ` Ville Syrjala
  2026-11-11 11:20 ` [PATCH 10/13] drm/i915/dpt: Cache DPTs in the gem object Ville Syrjala
                   ` (7 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: Ville Syrjala @ 2026-11-11 11:20 UTC (permalink / raw)
  To: intel-gfx; +Cc: intel-xe

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Currently the DPT suspend/resume happens through the parent
interface from the display code. The reason being that we track
DPTs only in framebuffers and those are the purview of the display
code.

Cut out the display middle man by tracking the DPTs in their
associated GGTT. This means a leaner parent interface, and the
strict ordering requirement between the DPT and GGTT
suspend/resume is now guaranteed internally by the GGTT code.

Currently DPT lifetime is still tied to the FB lifetime, but
that is changing soon. For that reason i915_dpt_suspend() is
already written in a way that can deal with DPTs potentially
getting destroyed during suspend. Thus the suspend path drains
the dpt_list one by one, drops the lock around
i915_ggtt_suspend_vm() (relying on the elevated reference
count to keep the DPT alive) and once done all the DPTs that
are still alive are put back onto the GGTT's dpt_list.

The resume side is easier since i915_ggtt_resume_vm() is
essentially a nop for DPTs. Thus it can be called while
holding the lock.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 .../drm/i915/display/intel_display_driver.c   |  2 +-
 drivers/gpu/drm/i915/display/intel_dpt.c      | 58 -------------
 drivers/gpu/drm/i915/display/intel_dpt.h      |  2 -
 drivers/gpu/drm/i915/display/intel_parent.c   | 12 ---
 drivers/gpu/drm/i915/display/intel_parent.h   |  2 -
 drivers/gpu/drm/i915/gt/intel_ggtt.c          | 10 +++
 drivers/gpu/drm/i915/gt/intel_gtt.h           |  4 +
 drivers/gpu/drm/i915/i915_dpt.c               | 85 +++++++++++++++++--
 drivers/gpu/drm/i915/i915_dpt.h               |  4 +
 drivers/gpu/drm/i915/i915_driver.c            |  5 --
 include/drm/intel/display_parent_interface.h  |  2 -
 11 files changed, 95 insertions(+), 91 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_display_driver.c b/drivers/gpu/drm/i915/display/intel_display_driver.c
index 0c7bec7d7f01..7f263660fd99 100644
--- a/drivers/gpu/drm/i915/display/intel_display_driver.c
+++ b/drivers/gpu/drm/i915/display/intel_display_driver.c
@@ -766,7 +766,7 @@ static int __intel_display_driver_pm_suspend(struct intel_display *display, bool
 			display->restore.modeset_state = state;
 	}
 
-	/* ensure all DPT VMAs have been unpinned for intel_dpt_suspend() */
+	/* ensure all DPT VMAs have been unpinned for i915_dpt_suspend() */
 	flush_workqueue(display->wq.cleanup);
 
 	intel_dp_mst_suspend(display);
diff --git a/drivers/gpu/drm/i915/display/intel_dpt.c b/drivers/gpu/drm/i915/display/intel_dpt.c
index 145dc9511116..ccdfefe96c93 100644
--- a/drivers/gpu/drm/i915/display/intel_dpt.c
+++ b/drivers/gpu/drm/i915/display/intel_dpt.c
@@ -34,61 +34,3 @@ void intel_dpt_configure(struct intel_crtc *crtc)
 			     CHICKEN_MISC_DISABLE_DPT);
 	}
 }
-
-/**
- * intel_dpt_suspend - suspend the memory mapping for all DPT FBs during system suspend
- * @display: display device instance
- *
- * Suspend the memory mapping during system suspend for all framebuffers which
- * are mapped to HW via a GGTT->DPT page table.
- *
- * This function must be called before the mappings in GGTT are suspended calling
- * i915_ggtt_suspend().
- */
-void intel_dpt_suspend(struct intel_display *display)
-{
-	struct drm_framebuffer *drm_fb;
-
-	if (!HAS_DISPLAY(display))
-		return;
-
-	mutex_lock(&display->drm->mode_config.fb_lock);
-
-	drm_for_each_fb(drm_fb, display->drm) {
-		struct intel_framebuffer *fb = to_intel_framebuffer(drm_fb);
-
-		if (fb->dpt)
-			intel_parent_dpt_suspend(display, fb->dpt);
-	}
-
-	mutex_unlock(&display->drm->mode_config.fb_lock);
-}
-
-/**
- * intel_dpt_resume - restore the memory mapping for all DPT FBs during system resume
- * @display: display device instance
- *
- * Restore the memory mapping during system resume for all framebuffers which
- * are mapped to HW via a GGTT->DPT page table. The content of these page
- * tables are not stored in the hibernation image during S4 and S3RST->S4
- * transitions, so here we reprogram the PTE entries in those tables.
- *
- * This function must be called after the mappings in GGTT have been restored calling
- * i915_ggtt_resume().
- */
-void intel_dpt_resume(struct intel_display *display)
-{
-	struct drm_framebuffer *drm_fb;
-
-	if (!HAS_DISPLAY(display))
-		return;
-
-	mutex_lock(&display->drm->mode_config.fb_lock);
-	drm_for_each_fb(drm_fb, display->drm) {
-		struct intel_framebuffer *fb = to_intel_framebuffer(drm_fb);
-
-		if (fb->dpt)
-			intel_parent_dpt_resume(display, fb->dpt);
-	}
-	mutex_unlock(&display->drm->mode_config.fb_lock);
-}
diff --git a/drivers/gpu/drm/i915/display/intel_dpt.h b/drivers/gpu/drm/i915/display/intel_dpt.h
index 11bd495693b2..dbf61fbcdcac 100644
--- a/drivers/gpu/drm/i915/display/intel_dpt.h
+++ b/drivers/gpu/drm/i915/display/intel_dpt.h
@@ -10,7 +10,5 @@ struct intel_crtc;
 struct intel_display;
 
 void intel_dpt_configure(struct intel_crtc *crtc);
-void intel_dpt_suspend(struct intel_display *display);
-void intel_dpt_resume(struct intel_display *display);
 
 #endif /* __INTEL_DPT_COMMON_H__ */
diff --git a/drivers/gpu/drm/i915/display/intel_parent.c b/drivers/gpu/drm/i915/display/intel_parent.c
index e9609c29997e..8497694b29d7 100644
--- a/drivers/gpu/drm/i915/display/intel_parent.c
+++ b/drivers/gpu/drm/i915/display/intel_parent.c
@@ -41,18 +41,6 @@ void intel_parent_dpt_destroy(struct intel_display *display, struct intel_dpt *d
 		display->parent->dpt->destroy(dpt);
 }
 
-void intel_parent_dpt_suspend(struct intel_display *display, struct intel_dpt *dpt)
-{
-	if (display->parent->dpt)
-		display->parent->dpt->suspend(dpt);
-}
-
-void intel_parent_dpt_resume(struct intel_display *display, struct intel_dpt *dpt)
-{
-	if (display->parent->dpt)
-		display->parent->dpt->resume(dpt);
-}
-
 /* fb_pin */
 int intel_parent_fb_pin_ggtt_pin(struct intel_display *display,
 				 struct drm_gem_object *obj,
diff --git a/drivers/gpu/drm/i915/display/intel_parent.h b/drivers/gpu/drm/i915/display/intel_parent.h
index 3d0959d67727..b22f92404f65 100644
--- a/drivers/gpu/drm/i915/display/intel_parent.h
+++ b/drivers/gpu/drm/i915/display/intel_parent.h
@@ -27,8 +27,6 @@ struct intel_dpt *intel_parent_dpt_create(struct intel_display *display,
 					  struct drm_gem_object *obj,
 					  const struct intel_gtt_view *view);
 void intel_parent_dpt_destroy(struct intel_display *display, struct intel_dpt *dpt);
-void intel_parent_dpt_suspend(struct intel_display *display, struct intel_dpt *dpt);
-void intel_parent_dpt_resume(struct intel_display *display, struct intel_dpt *dpt);
 
 /* fb_pin */
 int intel_parent_fb_pin_ggtt_pin(struct intel_display *display,
diff --git a/drivers/gpu/drm/i915/gt/intel_ggtt.c b/drivers/gpu/drm/i915/gt/intel_ggtt.c
index 64ca5bbc53c6..abd7efc8bcdc 100644
--- a/drivers/gpu/drm/i915/gt/intel_ggtt.c
+++ b/drivers/gpu/drm/i915/gt/intel_ggtt.c
@@ -22,6 +22,7 @@
 #include "intel_gt.h"
 #include "intel_gt_regs.h"
 #include "intel_ring.h"
+#include "i915_dpt.h"
 #include "i915_drv.h"
 #include "i915_pci.h"
 #include "i915_reg.h"
@@ -182,6 +183,9 @@ void i915_ggtt_suspend(struct i915_ggtt *ggtt)
 {
 	struct intel_gt *gt;
 
+	/* must be called before ggtt is suspended */
+	i915_dpt_suspend(ggtt);
+
 	i915_ggtt_suspend_vm(&ggtt->vm, false);
 	ggtt->invalidate(ggtt);
 
@@ -1591,6 +1595,9 @@ struct i915_ggtt *i915_ggtt_create(struct drm_i915_private *i915)
 
 	INIT_LIST_HEAD(&ggtt->gt_list);
 
+	INIT_LIST_HEAD(&ggtt->dpt_list);
+	spin_lock_init(&ggtt->dpt_lock);
+
 	return ggtt;
 }
 
@@ -1679,4 +1686,7 @@ void i915_ggtt_resume(struct i915_ggtt *ggtt)
 		wbinvd_on_all_cpus();
 
 	intel_ggtt_restore_fences(ggtt);
+
+	/* must be called after ggtt is resumed */
+	i915_dpt_resume(ggtt);
 }
diff --git a/drivers/gpu/drm/i915/gt/intel_gtt.h b/drivers/gpu/drm/i915/gt/intel_gtt.h
index b54ee4f25af1..bda1c1700c8f 100644
--- a/drivers/gpu/drm/i915/gt/intel_gtt.h
+++ b/drivers/gpu/drm/i915/gt/intel_gtt.h
@@ -407,6 +407,10 @@ struct i915_ggtt {
 
 	/** List of GTs mapping this GGTT */
 	struct list_head gt_list;
+
+	/* List of DPTs create for this GGTT */
+	struct list_head dpt_list;
+	spinlock_t dpt_lock; /* protects dpt_list */
 };
 
 struct i915_ppgtt {
diff --git a/drivers/gpu/drm/i915/i915_dpt.c b/drivers/gpu/drm/i915/i915_dpt.c
index 96bcffc38d3c..e625ec293c5c 100644
--- a/drivers/gpu/drm/i915/i915_dpt.c
+++ b/drivers/gpu/drm/i915/i915_dpt.c
@@ -20,6 +20,7 @@ struct intel_dpt {
 	struct drm_i915_gem_object *obj;
 	struct i915_vma *vma;
 	void __iomem *iomem;
+	struct list_head ggtt_link;
 };
 
 #define i915_is_dpt(vm) ((vm)->is_dpt)
@@ -179,10 +180,27 @@ void i915_dpt_unpin_from_ggtt(struct intel_dpt *dpt)
 	i915_vma_put(dpt->vma);
 }
 
+static void i915_dpt_get(struct intel_dpt *dpt)
+{
+	i915_vm_get(&dpt->vm);
+}
+
+static void i915_dpt_put(struct intel_dpt *dpt)
+{
+	i915_vm_put(&dpt->vm);
+}
+
+static void i915_dpt_free(struct intel_dpt *dpt)
+{
+	dpt->obj->is_dpt = false;
+	i915_dpt_put(dpt);
+}
+
 static struct intel_dpt *i915_dpt_create(struct drm_gem_object *obj,
 					 const struct intel_gtt_view *view)
 {
 	struct drm_i915_private *i915 = to_i915(obj->dev);
+	struct i915_ggtt *ggtt = to_gt(i915)->ggtt;
 	struct drm_i915_gem_object *dpt_obj;
 	struct i915_address_space *vm;
 	struct intel_dpt *dpt;
@@ -239,28 +257,79 @@ static struct intel_dpt *i915_dpt_create(struct drm_gem_object *obj,
 	vm->vma_ops.bind_vma    = dpt_bind_vma;
 	vm->vma_ops.unbind_vma  = dpt_unbind_vma;
 
-	vm->pte_encode = vm->gt->ggtt->vm.pte_encode;
+	vm->pte_encode = ggtt->vm.pte_encode;
 
 	dpt->obj = dpt_obj;
 	dpt->obj->is_dpt = true;
 
+	spin_lock(&ggtt->dpt_lock);
+	list_add_tail(&dpt->ggtt_link, &ggtt->dpt_list);
+	spin_unlock(&ggtt->dpt_lock);
+
 	return dpt;
 }
 
 static void i915_dpt_destroy(struct intel_dpt *dpt)
 {
-	dpt->obj->is_dpt = false;
-	i915_vm_put(&dpt->vm);
+	struct i915_ggtt *ggtt = i915_dpt_to_vm(dpt)->gt->ggtt;
+
+	spin_lock(&ggtt->dpt_lock);
+	list_del_init(&dpt->ggtt_link);
+	spin_unlock(&ggtt->dpt_lock);
+
+	i915_dpt_free(dpt);
 }
 
-static void i915_dpt_suspend(struct intel_dpt *dpt)
+void i915_dpt_suspend(struct i915_ggtt *ggtt)
 {
-	i915_ggtt_suspend_vm(&dpt->vm, true);
+	struct drm_i915_private *i915 = ggtt->vm.i915;
+	LIST_HEAD(dpt_list);
+
+	for (;;) {
+		struct intel_dpt *dpt;
+
+		spin_lock(&ggtt->dpt_lock);
+
+		dpt = list_first_entry_or_null(&ggtt->dpt_list,
+					       typeof(*dpt), ggtt_link);
+		if (dpt) {
+			i915_dpt_get(dpt);
+			list_move_tail(&dpt->ggtt_link, &dpt_list);
+		}
+
+		spin_unlock(&ggtt->dpt_lock);
+
+		if (!dpt)
+			break;
+
+		i915_ggtt_suspend_vm(&dpt->vm, true);
+
+		i915_dpt_put(dpt);
+	}
+
+	spin_lock(&ggtt->dpt_lock);
+
+	drm_WARN_ON(&i915->drm, !list_empty(&ggtt->dpt_list));
+	list_splice(&dpt_list, &ggtt->dpt_list);
+
+	spin_unlock(&ggtt->dpt_lock);
 }
 
-static void i915_dpt_resume(struct intel_dpt *dpt)
+void i915_dpt_resume(struct i915_ggtt *ggtt)
 {
-	i915_ggtt_resume_vm(&dpt->vm, true);
+	struct intel_dpt *dpt;
+
+	/*
+	 * i915_ggtt_resume_vm() with evict_all==true
+	 * only does a quick sanity check, so OK to call
+	 * with ggtt->dpt_lock held.
+	 */
+	spin_lock(&ggtt->dpt_lock);
+
+	list_for_each_entry(dpt, &ggtt->dpt_list, ggtt_link)
+		i915_ggtt_resume_vm(&dpt->vm, true);
+
+	spin_unlock(&ggtt->dpt_lock);
 }
 
 u64 i915_dpt_offset(struct i915_vma *dpt_vma)
@@ -271,6 +340,4 @@ u64 i915_dpt_offset(struct i915_vma *dpt_vma)
 const struct intel_display_dpt_interface i915_display_dpt_interface = {
 	.create = i915_dpt_create,
 	.destroy = i915_dpt_destroy,
-	.suspend = i915_dpt_suspend,
-	.resume = i915_dpt_resume,
 };
diff --git a/drivers/gpu/drm/i915/i915_dpt.h b/drivers/gpu/drm/i915/i915_dpt.h
index 08dbe444fe18..51a497abb5e1 100644
--- a/drivers/gpu/drm/i915/i915_dpt.h
+++ b/drivers/gpu/drm/i915/i915_dpt.h
@@ -7,6 +7,7 @@
 #include <linux/types.h>
 
 struct i915_address_space;
+struct i915_ggtt;
 struct i915_vma;
 struct intel_dpt;
 
@@ -15,6 +16,9 @@ struct i915_vma *i915_dpt_pin_to_ggtt(struct intel_dpt *dpt, unsigned int alignm
 void i915_dpt_unpin_from_ggtt(struct intel_dpt *dpt);
 u64 i915_dpt_offset(struct i915_vma *dpt_vma);
 
+void i915_dpt_suspend(struct i915_ggtt *ggtt);
+void i915_dpt_resume(struct i915_ggtt *ggtt);
+
 extern const struct intel_display_dpt_interface i915_display_dpt_interface;
 
 #endif /* __I915_DPT_H__ */
diff --git a/drivers/gpu/drm/i915/i915_driver.c b/drivers/gpu/drm/i915/i915_driver.c
index 5787f40ac62e..56bca9301532 100644
--- a/drivers/gpu/drm/i915/i915_driver.c
+++ b/drivers/gpu/drm/i915/i915_driver.c
@@ -1084,8 +1084,6 @@ static int i915_drm_suspend(struct drm_device *dev)
 
 	intel_irq_suspend(dev_priv);
 
-	/* Must be called before GGTT is suspended. */
-	intel_dpt_suspend(display);
 	i915_ggtt_suspend(to_gt(dev_priv)->ggtt);
 
 	i9xx_display_sr_save(display);
@@ -1214,9 +1212,6 @@ static int i915_drm_resume(struct drm_device *dev)
 		if (GRAPHICS_VER(gt->i915) >= 8)
 			setup_private_pat(gt);
 
-	/* Must be called after GGTT is resumed. */
-	intel_dpt_resume(display);
-
 	intel_dmc_resume(display);
 
 	i9xx_display_sr_restore(display);
diff --git a/include/drm/intel/display_parent_interface.h b/include/drm/intel/display_parent_interface.h
index 33d29d061373..00f8e27be9f3 100644
--- a/include/drm/intel/display_parent_interface.h
+++ b/include/drm/intel/display_parent_interface.h
@@ -69,8 +69,6 @@ struct intel_display_dpt_interface {
 	struct intel_dpt *(*create)(struct drm_gem_object *obj,
 				    const struct intel_gtt_view *view);
 	void (*destroy)(struct intel_dpt *dpt);
-	void (*suspend)(struct intel_dpt *dpt);
-	void (*resume)(struct intel_dpt *dpt);
 };
 
 struct intel_display_dsb_interface {
-- 
2.56.0


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 10/13] drm/i915/dpt: Cache DPTs in the gem object
  2026-11-11 11:19 [PATCH 00/13] drm/i915/dpt: Optimize i915 DPT Ville Syrjala
                   ` (8 preceding siblings ...)
  2026-11-11 11:20 ` [PATCH 09/13] drm/i915/dpt: Make i915_dpt_{suspend, resume}() internal to i915 Ville Syrjala
@ 2026-11-11 11:20 ` Ville Syrjala
  2026-11-11 11:20 ` [PATCH 11/13] drm/i915/dpt: Hide the DPT even more from the display code Ville Syrjala
                   ` (6 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: Ville Syrjala @ 2026-11-11 11:20 UTC (permalink / raw)
  To: intel-gfx; +Cc: intel-xe

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Currently DPTs are tracked in the framebuffer. Each new
framebuffer gets a fresh DPT. On first glance that seems fine,
but the problem is that your typical userspace doesn't
cache framebuffers at all. Each new frame gets a whole new
framebuffer, and we have to therefore start with a new DPT
as well and populate it (and its GGTT mapping) from scratch.
This is all rather expensive.

Fix the situation by tracking the DPTs in the gem object instead.
The whole thing is somewhat modeled after the already existing
vma tracking. Each time a new framebuffer is created we first
look through the already existing DPTs on the gem object, and
if one with an identical gtt view is found it gets reused.

The one major difference between this and the vma stuff is that
vmas can get unbound when not pinned, if there is sufficient
pressure on the address space. I didn't bother implementing
a similar mechanism for DPTs, and instead any created DPT will
simply stay around as long as the actual gem object will stay
around. I'm thinking large gem objects at least shouldn't stay
around long past their use as a framebuffer. Should that turn
out to be false we might need to add some kind of reaping stuff,
or perhaps just limit the number of cached DPTs per gem object.

With this the display code no longer has to even see the
DPT object pointer. Though we do have to pass the obj+view
also the unpin functions so that we can find the right DPT
there. Technically we could now even stop passing around
the vma pointers through the display code, except that
would probably break the vma reuse hacks that xe has..

As for some performance numbers, just a quick
'vblank_mode=0 glxgears -fullscreen' run on MTL with a
debug heavy kernel used to spend ~20% of the time in
.prepare_fb(), and now it's about 5%. And an optimized
kernel on a DG2 shows approximately 6% -> 1%.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 .../drm/i915/display/intel_display_types.h    |   3 -
 drivers/gpu/drm/i915/display/intel_fb.c       |  16 +--
 drivers/gpu/drm/i915/display/intel_parent.c   |  26 ++--
 drivers/gpu/drm/i915/display/intel_parent.h   |  13 +-
 drivers/gpu/drm/i915/display/intel_plane.c    |  13 +-
 drivers/gpu/drm/i915/gem/i915_gem_object.c    |   6 +
 .../gpu/drm/i915/gem/i915_gem_object_types.h  |   6 +
 drivers/gpu/drm/i915/i915_dpt.c               | 119 +++++++++++++++---
 drivers/gpu/drm/i915/i915_dpt.h               |   7 ++
 drivers/gpu/drm/i915/i915_fb_pin.c            |  44 +++++--
 drivers/gpu/drm/xe/display/xe_fb_pin.c        |  12 +-
 include/drm/intel/display_parent_interface.h  |  11 +-
 12 files changed, 180 insertions(+), 96 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
index 90a5d29169c6..afe0c6134534 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -147,8 +147,6 @@ struct intel_framebuffer {
 		struct intel_fb_view remapped_view;
 	};
 
-	struct intel_dpt *dpt;
-
 	unsigned int min_alignment;
 	unsigned int vtd_guard;
 
@@ -690,7 +688,6 @@ struct intel_plane_state {
 	} hw;
 
 	struct i915_vma *ggtt_vma;
-	struct i915_vma *dpt_vma;
 
 	struct intel_fb_view view;
 
diff --git a/drivers/gpu/drm/i915/display/intel_fb.c b/drivers/gpu/drm/i915/display/intel_fb.c
index 35f1d5dd31d7..dba2d5ec6688 100644
--- a/drivers/gpu/drm/i915/display/intel_fb.c
+++ b/drivers/gpu/drm/i915/display/intel_fb.c
@@ -2078,9 +2078,6 @@ static void intel_user_framebuffer_destroy(struct drm_framebuffer *fb)
 
 	drm_framebuffer_cleanup(fb);
 
-	if (intel_fb_uses_dpt(fb))
-		intel_parent_dpt_destroy(display, intel_fb->dpt);
-
 	intel_bo_framebuffer_fini(intel_fb_bo(fb));
 
 	intel_parent_frontbuffer_put(display, intel_fb->frontbuffer);
@@ -2276,34 +2273,27 @@ int intel_framebuffer_init(struct intel_framebuffer *intel_fb,
 	if (intel_fb_uses_dpt(fb)) {
 		struct drm_gem_object *obj = intel_fb_bo(&intel_fb->base);
 		const struct intel_gtt_view *view;
-		struct intel_dpt *dpt;
 
 		if (intel_fb_needs_pot_stride_remap(intel_fb))
 			view = &intel_fb->remapped_view.gtt;
 		else
 			view = &intel_fb->normal_view.gtt;
 
-		dpt = intel_parent_dpt_create(display, obj, view);
-		if (IS_ERR(dpt)) {
+		ret = intel_parent_dpt_create(display, obj, view);
+		if (ret) {
 			drm_dbg_kms(display->drm, "failed to create DPT\n");
-			ret = PTR_ERR(dpt);
 			goto err_bo_framebuffer_fini;
 		}
-
-		intel_fb->dpt = dpt;
 	}
 
 	ret = drm_framebuffer_init(display->drm, fb, &intel_fb_funcs);
 	if (ret) {
 		drm_err(display->drm, "framebuffer init failed %d\n", ret);
-		goto err_free_dpt;
+		goto err_bo_framebuffer_fini;
 	}
 
 	return 0;
 
-err_free_dpt:
-	if (intel_fb_uses_dpt(fb))
-		intel_parent_dpt_destroy(display, intel_fb->dpt);
 err_bo_framebuffer_fini:
 	intel_bo_framebuffer_fini(obj);
 err_frontbuffer_put:
diff --git a/drivers/gpu/drm/i915/display/intel_parent.c b/drivers/gpu/drm/i915/display/intel_parent.c
index 8497694b29d7..22be54098b3d 100644
--- a/drivers/gpu/drm/i915/display/intel_parent.c
+++ b/drivers/gpu/drm/i915/display/intel_parent.c
@@ -25,20 +25,14 @@
 #include "intel_parent.h"
 
 /* dpt */
-struct intel_dpt *intel_parent_dpt_create(struct intel_display *display,
-					  struct drm_gem_object *obj,
-					  const struct intel_gtt_view *view)
+int intel_parent_dpt_create(struct intel_display *display,
+			    struct drm_gem_object *obj,
+			    const struct intel_gtt_view *view)
 {
 	if (display->parent->dpt)
 		return display->parent->dpt->create(obj, view);
 
-	return NULL;
-}
-
-void intel_parent_dpt_destroy(struct intel_display *display, struct intel_dpt *dpt)
-{
-	if (display->parent->dpt)
-		display->parent->dpt->destroy(dpt);
+	return 0;
 }
 
 /* fb_pin */
@@ -62,22 +56,20 @@ void intel_parent_fb_pin_ggtt_unpin(struct intel_display *display,
 
 int intel_parent_fb_pin_dpt_pin(struct intel_display *display,
 				struct drm_gem_object *obj,
-				struct intel_dpt *dpt,
 				const struct intel_fb_pin_params *pin_params,
-				struct i915_vma **out_dpt_vma,
 				struct i915_vma **out_ggtt_vma,
 				u32 *out_offset)
 {
-	return display->parent->fb_pin->dpt_pin(obj, dpt, pin_params,
-						out_dpt_vma, out_ggtt_vma, out_offset);
+	return display->parent->fb_pin->dpt_pin(obj, pin_params,
+						out_ggtt_vma, out_offset);
 }
 
 void intel_parent_fb_pin_dpt_unpin(struct intel_display *display,
-				   struct intel_dpt *dpt,
-				   struct i915_vma *dpt_vma,
+				   struct drm_gem_object *obj,
+				   const struct intel_gtt_view *view,
 				   struct i915_vma *ggtt_vma)
 {
-	return display->parent->fb_pin->dpt_unpin(dpt, dpt_vma, ggtt_vma);
+	return display->parent->fb_pin->dpt_unpin(obj, view, ggtt_vma);
 }
 
 struct i915_vma *intel_parent_fb_pin_reuse_vma(struct intel_display *display,
diff --git a/drivers/gpu/drm/i915/display/intel_parent.h b/drivers/gpu/drm/i915/display/intel_parent.h
index b22f92404f65..e95710e115be 100644
--- a/drivers/gpu/drm/i915/display/intel_parent.h
+++ b/drivers/gpu/drm/i915/display/intel_parent.h
@@ -23,10 +23,9 @@ struct intel_stolen_node;
 struct iosys_map;
 
 /* dpt */
-struct intel_dpt *intel_parent_dpt_create(struct intel_display *display,
-					  struct drm_gem_object *obj,
-					  const struct intel_gtt_view *view);
-void intel_parent_dpt_destroy(struct intel_display *display, struct intel_dpt *dpt);
+int intel_parent_dpt_create(struct intel_display *display,
+			    struct drm_gem_object *obj,
+			    const struct intel_gtt_view *view);
 
 /* fb_pin */
 int intel_parent_fb_pin_ggtt_pin(struct intel_display *display,
@@ -40,14 +39,12 @@ void intel_parent_fb_pin_ggtt_unpin(struct intel_display *display,
 				    int fence_id);
 int intel_parent_fb_pin_dpt_pin(struct intel_display *display,
 				struct drm_gem_object *obj,
-				struct intel_dpt *dpt,
 				const struct intel_fb_pin_params *pin_params,
-				struct i915_vma **out_dpt_vma,
 				struct i915_vma **out_ggtt_vma,
 				u32 *out_offset);
 void intel_parent_fb_pin_dpt_unpin(struct intel_display *display,
-				   struct intel_dpt *dpt,
-				   struct i915_vma *dpt_vma,
+				   struct drm_gem_object *obj,
+				   const struct intel_gtt_view *view,
 				   struct i915_vma *ggtt_vma);
 struct i915_vma *intel_parent_fb_pin_reuse_vma(struct intel_display *display,
 					       struct i915_vma *old_ggtt_vma,
diff --git a/drivers/gpu/drm/i915/display/intel_plane.c b/drivers/gpu/drm/i915/display/intel_plane.c
index d23de0f34e4b..40e9b1ac4e11 100644
--- a/drivers/gpu/drm/i915/display/intel_plane.c
+++ b/drivers/gpu/drm/i915/display/intel_plane.c
@@ -137,7 +137,6 @@ intel_plane_duplicate_state(struct drm_plane *plane)
 	__drm_atomic_helper_plane_duplicate_state(plane, &intel_state->uapi);
 
 	intel_state->ggtt_vma = NULL;
-	intel_state->dpt_vma = NULL;
 	intel_state->fence_id = -1;
 	intel_state->damage = DRM_RECT_INIT(0, 0, 0, 0);
 	intel_state->psr2_sel_fetch_area = DRM_RECT_INIT(0, 0, 0, 0);
@@ -173,7 +172,6 @@ intel_plane_destroy_state(struct drm_plane *plane,
 	struct intel_plane_state *plane_state = to_intel_plane_state(state);
 
 	drm_WARN_ON(plane->dev, plane_state->ggtt_vma);
-	drm_WARN_ON(plane->dev, plane_state->dpt_vma);
 
 	__drm_atomic_helper_plane_destroy_state(&plane_state->uapi);
 	if (plane_state->hw.fb)
@@ -1371,7 +1369,6 @@ int intel_plane_pin_fb(struct intel_plane_state *plane_state,
 	const struct intel_framebuffer *old_fb =
 		to_intel_framebuffer(old_plane_state->hw.fb);
 	struct i915_vma *ggtt_vma = NULL;
-	struct i915_vma *dpt_vma = NULL;
 	int fence_id = -1;
 	u32 offset = 0;
 	int ret;
@@ -1410,14 +1407,12 @@ int intel_plane_pin_fb(struct intel_plane_state *plane_state,
 		};
 
 		ret = intel_parent_fb_pin_dpt_pin(display, intel_fb_bo(&fb->base),
-						  fb->dpt, &pin_params,
-						  &dpt_vma, &ggtt_vma, &offset);
+						  &pin_params, &ggtt_vma, &offset);
 	}
 	if (ret)
 		return ret;
 
 got_vma:
-	plane_state->dpt_vma = dpt_vma;
 	plane_state->ggtt_vma = ggtt_vma;
 	plane_state->fence_id = fence_id;
 
@@ -1440,11 +1435,11 @@ void intel_plane_unpin_fb(struct intel_plane_state *old_plane_state)
 		old_plane_state->ggtt_vma = NULL;
 		old_plane_state->fence_id = -1;
 	} else {
-		intel_parent_fb_pin_dpt_unpin(display, fb->dpt,
-					      old_plane_state->dpt_vma,
+		intel_parent_fb_pin_dpt_unpin(display,
+					      intel_fb_bo(&fb->base),
+					      &old_plane_state->view.gtt,
 					      old_plane_state->ggtt_vma);
 
-		old_plane_state->dpt_vma = NULL;
 		old_plane_state->ggtt_vma = NULL;
 	}
 }
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object.c b/drivers/gpu/drm/i915/gem/i915_gem_object.c
index 9e01f8b2079a..f5873e59666b 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_object.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_object.c
@@ -32,6 +32,7 @@
 #include "display/intel_frontbuffer.h"
 #include "pxp/intel_pxp.h"
 
+#include "i915_dpt.h"
 #include "i915_drv.h"
 #include "i915_file_private.h"
 #include "i915_gem_clflush.h"
@@ -116,6 +117,9 @@ void i915_gem_object_init(struct drm_i915_gem_object *obj,
 	INIT_LIST_HEAD(&obj->lut_list);
 	spin_lock_init(&obj->lut_lock);
 
+	INIT_LIST_HEAD(&obj->dpt_list);
+	spin_lock_init(&obj->dpt_lock);
+
 	spin_lock_init(&obj->mmo.lock);
 	obj->mmo.offsets = RB_ROOT;
 
@@ -402,6 +406,8 @@ void __i915_gem_free_object(struct drm_i915_gem_object *obj)
 	if (obj->shares_resv_from)
 		i915_vm_resv_put(obj->shares_resv_from);
 
+	i915_dpt_obj_free(obj);
+
 	__i915_gem_object_fini(obj);
 }
 
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h
index 969f6ea2b855..2a2735bfc7c9 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_object_types.h
+++ b/drivers/gpu/drm/i915/gem/i915_gem_object_types.h
@@ -288,6 +288,12 @@ struct drm_i915_gem_object {
 	struct list_head lut_list;
 	spinlock_t lut_lock; /* guards lut_list */
 
+	/**
+	 * @dpt_list: List of DPTs backed by this object
+	 */
+	struct list_head dpt_list;
+	spinlock_t dpt_lock; /* protects dpt_list */
+
 	/**
 	 * @obj_link: Link into @i915_gem_ww_ctx.obj_list
 	 *
diff --git a/drivers/gpu/drm/i915/i915_dpt.c b/drivers/gpu/drm/i915/i915_dpt.c
index e625ec293c5c..27f9a648bb26 100644
--- a/drivers/gpu/drm/i915/i915_dpt.c
+++ b/drivers/gpu/drm/i915/i915_dpt.c
@@ -20,16 +20,15 @@ struct intel_dpt {
 	struct drm_i915_gem_object *obj;
 	struct i915_vma *vma;
 	void __iomem *iomem;
+	struct intel_gtt_view view;
+	struct list_head obj_link;
 	struct list_head ggtt_link;
 };
 
-#define i915_is_dpt(vm) ((vm)->is_dpt)
-
-static inline struct intel_dpt *
-i915_vm_to_dpt(struct i915_address_space *vm)
+struct intel_dpt *i915_vm_to_dpt(struct i915_address_space *vm)
 {
 	BUILD_BUG_ON(offsetof(struct intel_dpt, vm));
-	drm_WARN_ON(&vm->i915->drm, !i915_is_dpt(vm));
+	drm_WARN_ON(&vm->i915->drm, !vm->is_dpt);
 	return container_of(vm, struct intel_dpt, vm);
 }
 
@@ -196,10 +195,66 @@ static void i915_dpt_free(struct intel_dpt *dpt)
 	i915_dpt_put(dpt);
 }
 
-static struct intel_dpt *i915_dpt_create(struct drm_gem_object *obj,
-					 const struct intel_gtt_view *view)
+static struct intel_dpt *__i915_dpt_lookup(struct drm_i915_gem_object *obj,
+					   const struct intel_gtt_view *view)
+{
+	struct intel_dpt *dpt;
+
+	lockdep_assert_held(&obj->dpt_lock);
+
+	list_for_each_entry(dpt, &obj->dpt_list, obj_link) {
+		if (!intel_gtt_view_compare(&dpt->view, view))
+			return dpt;
+	}
+
+	return NULL;
+}
+
+struct intel_dpt *i915_dpt_lookup(struct drm_i915_gem_object *obj,
+				  const struct intel_gtt_view *view)
+{
+	struct intel_dpt *dpt;
+
+	spin_lock(&obj->dpt_lock);
+	dpt = __i915_dpt_lookup(obj, view);
+	spin_unlock(&obj->dpt_lock);
+
+	return dpt;
+}
+
+static void i915_dpt_add(struct drm_i915_gem_object *obj,
+			 struct intel_dpt *new_dpt)
+{
+	struct drm_i915_private *i915 = to_i915(obj->base.dev);
+	struct i915_ggtt *ggtt = to_gt(i915)->ggtt;
+	struct intel_dpt *old_dpt;
+
+	spin_lock(&obj->dpt_lock);
+
+	/*
+	 * If someone else inserted a suitable DPT in the
+	 * meantime we keep that and throw away the new one.
+	 */
+	old_dpt = __i915_dpt_lookup(obj, &new_dpt->view);
+	if (old_dpt) {
+		spin_unlock(&obj->dpt_lock);
+		i915_dpt_free(new_dpt);
+		return;
+	}
+
+	list_add_tail(&new_dpt->obj_link, &obj->dpt_list);
+
+	spin_unlock(&obj->dpt_lock);
+
+	spin_lock(&ggtt->dpt_lock);
+	list_add_tail(&new_dpt->ggtt_link, &ggtt->dpt_list);
+	spin_unlock(&ggtt->dpt_lock);
+}
+
+static struct intel_dpt *dpt_create(struct drm_i915_gem_object *obj,
+				    const struct intel_gtt_view *view)
 {
-	struct drm_i915_private *i915 = to_i915(obj->dev);
+	struct drm_i915_private *i915 = to_i915(obj->base.dev);
 	struct i915_ggtt *ggtt = to_gt(i915)->ggtt;
 	struct drm_i915_gem_object *dpt_obj;
 	struct i915_address_space *vm;
@@ -211,7 +266,7 @@ static struct intel_dpt *i915_dpt_create(struct drm_gem_object *obj,
 		size = intel_remapped_info_size(&view->remapped);
 	} else {
 		drm_WARN_ON(&i915->drm, !intel_gtt_view_is_normal(view));
-		size = DIV_ROUND_UP_ULL(obj->size, I915_GTT_PAGE_SIZE);
+		size = DIV_ROUND_UP_ULL(obj->base.size, I915_GTT_PAGE_SIZE);
 	}
 
 	size = round_up(size * sizeof(gen8_pte_t), I915_GTT_PAGE_SIZE);
@@ -241,6 +296,8 @@ static struct intel_dpt *i915_dpt_create(struct drm_gem_object *obj,
 
 	vm = &dpt->vm;
 
+	dpt->view = *view;
+
 	vm->gt = to_gt(i915);
 	vm->i915 = i915;
 	vm->dma = i915->drm.dev;
@@ -262,22 +319,47 @@ static struct intel_dpt *i915_dpt_create(struct drm_gem_object *obj,
 	dpt->obj = dpt_obj;
 	dpt->obj->is_dpt = true;
 
-	spin_lock(&ggtt->dpt_lock);
-	list_add_tail(&dpt->ggtt_link, &ggtt->dpt_list);
-	spin_unlock(&ggtt->dpt_lock);
-
 	return dpt;
 }
 
-static void i915_dpt_destroy(struct intel_dpt *dpt)
+static int i915_dpt_create(struct drm_gem_object *_obj,
+			   const struct intel_gtt_view *view)
 {
-	struct i915_ggtt *ggtt = i915_dpt_to_vm(dpt)->gt->ggtt;
+	struct drm_i915_gem_object *obj = to_intel_bo(_obj);
+	struct intel_dpt *dpt;
+
+	/* already have one? */
+	dpt = i915_dpt_lookup(obj, view);
+	if (dpt)
+		return 0;
+
+	dpt = dpt_create(obj, view);
+	if (IS_ERR(dpt))
+		return PTR_ERR(dpt);
+
+	i915_dpt_add(obj, dpt);
+
+	return 0;
+}
+
+void i915_dpt_obj_free(struct drm_i915_gem_object *obj)
+{
+	struct drm_i915_private *i915 = to_i915(obj->base.dev);
+	struct i915_ggtt *ggtt = to_gt(i915)->ggtt;
+	struct intel_dpt *dpt, *next;
+	LIST_HEAD(dpt_list);
+
+	spin_lock(&obj->dpt_lock);
+	list_splice_init(&obj->dpt_list, &dpt_list);
+	spin_unlock(&obj->dpt_lock);
 
 	spin_lock(&ggtt->dpt_lock);
-	list_del_init(&dpt->ggtt_link);
+	list_for_each_entry(dpt, &dpt_list, obj_link)
+		list_del_init(&dpt->ggtt_link);
 	spin_unlock(&ggtt->dpt_lock);
 
-	i915_dpt_free(dpt);
+	list_for_each_entry_safe(dpt, next, &dpt_list, obj_link)
+		i915_dpt_free(dpt);
 }
 
 void i915_dpt_suspend(struct i915_ggtt *ggtt)
@@ -321,7 +403,7 @@ void i915_dpt_resume(struct i915_ggtt *ggtt)
 
 	/*
 	 * i915_ggtt_resume_vm() with evict_all==true
-	 * only does a quick sanity check, so OK to call
+	 * only does a sanity check, so OK to call
 	 * with ggtt->dpt_lock held.
 	 */
 	spin_lock(&ggtt->dpt_lock);
@@ -339,5 +421,4 @@ u64 i915_dpt_offset(struct i915_vma *dpt_vma)
 
 const struct intel_display_dpt_interface i915_display_dpt_interface = {
 	.create = i915_dpt_create,
-	.destroy = i915_dpt_destroy,
 };
diff --git a/drivers/gpu/drm/i915/i915_dpt.h b/drivers/gpu/drm/i915/i915_dpt.h
index 51a497abb5e1..5e88d8881db1 100644
--- a/drivers/gpu/drm/i915/i915_dpt.h
+++ b/drivers/gpu/drm/i915/i915_dpt.h
@@ -6,10 +6,17 @@
 
 #include <linux/types.h>
 
+struct drm_i915_gem_object;
 struct i915_address_space;
 struct i915_ggtt;
 struct i915_vma;
 struct intel_dpt;
+struct intel_gtt_view;
+
+struct intel_dpt *i915_vm_to_dpt(struct i915_address_space *vm);
+void i915_dpt_obj_free(struct drm_i915_gem_object *obj);
+struct intel_dpt *i915_dpt_lookup(struct drm_i915_gem_object *obj,
+				  const struct intel_gtt_view *view);
 
 struct i915_address_space *i915_dpt_to_vm(struct intel_dpt *dpt);
 struct i915_vma *i915_dpt_pin_to_ggtt(struct intel_dpt *dpt, unsigned int alignment);
diff --git a/drivers/gpu/drm/i915/i915_fb_pin.c b/drivers/gpu/drm/i915/i915_fb_pin.c
index b5672b2cf5bd..91385c17e564 100644
--- a/drivers/gpu/drm/i915/i915_fb_pin.c
+++ b/drivers/gpu/drm/i915/i915_fb_pin.c
@@ -15,11 +15,10 @@
 #include "i915_vma.h"
 
 static struct i915_vma *
-intel_fb_pin_to_dpt(struct drm_gem_object *_obj, struct intel_dpt *dpt,
+intel_fb_pin_to_dpt(struct drm_i915_gem_object *obj, struct intel_dpt *dpt,
 		    const struct intel_fb_pin_params *pin_params)
 {
-	struct drm_i915_private *i915 = to_i915(_obj->dev);
-	struct drm_i915_gem_object *obj = to_intel_bo(_obj);
+	struct drm_i915_private *i915 = to_i915(obj->base.dev);
 	struct i915_address_space *vm = i915_dpt_to_vm(dpt);
 	struct i915_gem_ww_ctx ww;
 	struct i915_vma *vma;
@@ -225,6 +224,8 @@ static int i915_fb_pin_ggtt_pin(struct drm_gem_object *obj,
 	if (IS_ERR(ggtt_vma))
 		return PTR_ERR(ggtt_vma);
 
+	drm_WARN_ON(obj->dev, ggtt_vma->vm->is_dpt);
+
 	*out_ggtt_vma = ggtt_vma;
 
 	/*
@@ -244,18 +245,23 @@ static int i915_fb_pin_ggtt_pin(struct drm_gem_object *obj,
 static void i915_fb_pin_ggtt_unpin(struct i915_vma *ggtt_vma,
 				   int fence_id)
 {
+	WARN_ON(ggtt_vma->vm->is_dpt);
+
 	intel_fb_unpin_vma(ggtt_vma, fence_id);
 }
 
-static int i915_fb_pin_dpt_pin(struct drm_gem_object *obj, struct intel_dpt *dpt,
+static int i915_fb_pin_dpt_pin(struct drm_gem_object *_obj,
 			       const struct intel_fb_pin_params *pin_params,
-			       struct i915_vma **out_dpt_vma,
 			       struct i915_vma **out_ggtt_vma,
 			       u32 *out_offset)
 {
+	struct drm_i915_gem_object *obj = to_intel_bo(_obj);
 	struct i915_vma *ggtt_vma, *dpt_vma;
+	struct intel_dpt *dpt;
 
-	WARN_ON(!dpt);
+	dpt = i915_dpt_lookup(obj, pin_params->view);
+	if (drm_WARN_ON(obj->base.dev, !dpt))
+		return -EINVAL;
 
 	ggtt_vma = i915_dpt_pin_to_ggtt(dpt, pin_params->alignment / 512);
 	if (IS_ERR(ggtt_vma))
@@ -267,20 +273,36 @@ static int i915_fb_pin_dpt_pin(struct drm_gem_object *obj, struct intel_dpt *dpt
 		return PTR_ERR(dpt_vma);
 	}
 
-	drm_WARN_ON(obj->dev, ggtt_vma == dpt_vma);
+	drm_WARN_ON(obj->base.dev, ggtt_vma == dpt_vma);
+	drm_WARN_ON(obj->base.dev, ggtt_vma->vm->is_dpt);
+	drm_WARN_ON(obj->base.dev, !dpt_vma->vm->is_dpt);
 
 	*out_ggtt_vma = ggtt_vma;
-	*out_dpt_vma = dpt_vma;
-
 	*out_offset = i915_ggtt_offset(ggtt_vma);
 
 	return 0;
 }
 
-static void i915_fb_pin_dpt_unpin(struct intel_dpt *dpt,
-				  struct i915_vma *dpt_vma,
+static void i915_fb_pin_dpt_unpin(struct drm_gem_object *_obj,
+				  const struct intel_gtt_view *view,
 				  struct i915_vma *ggtt_vma)
 {
+	struct drm_i915_gem_object *obj = to_intel_bo(_obj);
+	struct i915_vma *dpt_vma;
+	struct intel_dpt *dpt;
+
+	dpt = i915_dpt_lookup(obj, view);
+	if (drm_WARN_ON(obj->base.dev, !dpt))
+		return;
+
+	dpt_vma = i915_vma_lookup(obj, i915_dpt_to_vm(dpt), view);
+	if (drm_WARN_ON(obj->base.dev, !dpt_vma))
+		return;
+
+	drm_WARN_ON(obj->base.dev, ggtt_vma == dpt_vma);
+	drm_WARN_ON(obj->base.dev, ggtt_vma->vm->is_dpt);
+	drm_WARN_ON(obj->base.dev, !dpt_vma->vm->is_dpt);
+
 	intel_fb_unpin_vma(dpt_vma, -1);
 	i915_dpt_unpin_from_ggtt(dpt);
 }
diff --git a/drivers/gpu/drm/xe/display/xe_fb_pin.c b/drivers/gpu/drm/xe/display/xe_fb_pin.c
index 8df844120ea8..5cf02eb5b380 100644
--- a/drivers/gpu/drm/xe/display/xe_fb_pin.c
+++ b/drivers/gpu/drm/xe/display/xe_fb_pin.c
@@ -421,33 +421,27 @@ static void xe_fb_pin_ggtt_unpin(struct i915_vma *ggtt_vma,
 	__xe_unpin_fb_vma(ggtt_vma);
 }
 
-static int xe_fb_pin_dpt_pin(struct drm_gem_object *obj, struct intel_dpt *dpt,
+static int xe_fb_pin_dpt_pin(struct drm_gem_object *obj,
 			     const struct intel_fb_pin_params *pin_params,
-			     struct i915_vma **out_dpt_vma,
 			     struct i915_vma **out_ggtt_vma,
 			     u32 *out_offset)
 {
 	struct i915_vma *ggtt_vma;
 
-	WARN_ON(dpt);
-
 	ggtt_vma = __xe_pin_fb_vma(obj, true, pin_params);
 	if (IS_ERR(ggtt_vma))
 		return PTR_ERR(ggtt_vma);
 
-	*out_dpt_vma = NULL; /* not used on xe */
 	*out_ggtt_vma = ggtt_vma;
 	*out_offset = xe_ggtt_node_addr(ggtt_vma->node);
 
 	return 0;
 }
 
-static void xe_fb_pin_dpt_unpin(struct intel_dpt *dpt,
-				struct i915_vma *dpt_vma,
+static void xe_fb_pin_dpt_unpin(struct drm_gem_object *obj,
+				const struct intel_gtt_view *view,
 				struct i915_vma *ggtt_vma)
 {
-	WARN_ON(dpt || dpt_vma);
-
 	__xe_unpin_fb_vma(ggtt_vma);
 }
 
diff --git a/include/drm/intel/display_parent_interface.h b/include/drm/intel/display_parent_interface.h
index 00f8e27be9f3..d905d59cc43e 100644
--- a/include/drm/intel/display_parent_interface.h
+++ b/include/drm/intel/display_parent_interface.h
@@ -66,9 +66,8 @@ struct intel_display_bo_interface {
 };
 
 struct intel_display_dpt_interface {
-	struct intel_dpt *(*create)(struct drm_gem_object *obj,
-				    const struct intel_gtt_view *view);
-	void (*destroy)(struct intel_dpt *dpt);
+	int (*create)(struct drm_gem_object *obj,
+		      const struct intel_gtt_view *view);
 };
 
 struct intel_display_dsb_interface {
@@ -90,13 +89,11 @@ struct intel_display_fb_pin_interface {
 	void (*ggtt_unpin)(struct i915_vma *ggtt_vma,
 			   int fence_id);
 	int (*dpt_pin)(struct drm_gem_object *obj,
-		       struct intel_dpt *dpt,
 		       const struct intel_fb_pin_params *pin_params,
-		       struct i915_vma **out_dpt_vma,
 		       struct i915_vma **out_ggtt_vma,
 		       u32 *out_offset);
-	void (*dpt_unpin)(struct intel_dpt *dpt,
-			  struct i915_vma *dpt_vma,
+	void (*dpt_unpin)(struct drm_gem_object *obj,
+			  const struct intel_gtt_view *view,
 			  struct i915_vma *ggtt_vma);
 	struct i915_vma *(*reuse_vma)(struct i915_vma *old_ggtt_vma,
 				      struct drm_gem_object *old_obj,
-- 
2.56.0


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 11/13] drm/i915/dpt: Hide the DPT even more from the display code
  2026-11-11 11:19 [PATCH 00/13] drm/i915/dpt: Optimize i915 DPT Ville Syrjala
                   ` (9 preceding siblings ...)
  2026-11-11 11:20 ` [PATCH 10/13] drm/i915/dpt: Cache DPTs in the gem object Ville Syrjala
@ 2026-11-11 11:20 ` Ville Syrjala
  2026-11-11 11:20 ` [PATCH 12/13] drm/i915/dpt: Remove dpt->vma Ville Syrjala
                   ` (5 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: Ville Syrjala @ 2026-11-11 11:20 UTC (permalink / raw)
  To: intel-gfx; +Cc: intel-xe

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Now that the display code doesn't need to track the dpt
pointer we can even get rid of intel_parent_dpt_create()
by deferring the DPT creation until we have to pin the fb.

The downside is that we now pay the slight cost of the
DPT object allocation during the first atomic commit,
whereas previously the cost was incurred during the
addfb ioctl.

But even before the cost of actually populating the DPT
(and its GGTT mapping) was incurred during fb pinning.
The object allocation seems rather cheap compared to
that so this is probably fine.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_fb.c      | 16 ------------
 drivers/gpu/drm/i915/display/intel_parent.c  | 11 ---------
 drivers/gpu/drm/i915/display/intel_parent.h  |  6 -----
 drivers/gpu/drm/i915/i915_dpt.c              | 26 ++++++++------------
 drivers/gpu/drm/i915/i915_dpt.h              |  4 +--
 drivers/gpu/drm/i915/i915_driver.c           |  3 ---
 drivers/gpu/drm/i915/i915_fb_pin.c           |  6 ++---
 include/drm/intel/display_parent_interface.h |  9 -------
 8 files changed, 15 insertions(+), 66 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_fb.c b/drivers/gpu/drm/i915/display/intel_fb.c
index dba2d5ec6688..ef9aeb48dcd3 100644
--- a/drivers/gpu/drm/i915/display/intel_fb.c
+++ b/drivers/gpu/drm/i915/display/intel_fb.c
@@ -2270,22 +2270,6 @@ int intel_framebuffer_init(struct intel_framebuffer *intel_fb,
 	if (ret)
 		goto err_bo_framebuffer_fini;
 
-	if (intel_fb_uses_dpt(fb)) {
-		struct drm_gem_object *obj = intel_fb_bo(&intel_fb->base);
-		const struct intel_gtt_view *view;
-
-		if (intel_fb_needs_pot_stride_remap(intel_fb))
-			view = &intel_fb->remapped_view.gtt;
-		else
-			view = &intel_fb->normal_view.gtt;
-
-		ret = intel_parent_dpt_create(display, obj, view);
-		if (ret) {
-			drm_dbg_kms(display->drm, "failed to create DPT\n");
-			goto err_bo_framebuffer_fini;
-		}
-	}
-
 	ret = drm_framebuffer_init(display->drm, fb, &intel_fb_funcs);
 	if (ret) {
 		drm_err(display->drm, "framebuffer init failed %d\n", ret);
diff --git a/drivers/gpu/drm/i915/display/intel_parent.c b/drivers/gpu/drm/i915/display/intel_parent.c
index 22be54098b3d..f652bc51a4aa 100644
--- a/drivers/gpu/drm/i915/display/intel_parent.c
+++ b/drivers/gpu/drm/i915/display/intel_parent.c
@@ -24,17 +24,6 @@
 #include "intel_display_core.h"
 #include "intel_parent.h"
 
-/* dpt */
-int intel_parent_dpt_create(struct intel_display *display,
-			    struct drm_gem_object *obj,
-			    const struct intel_gtt_view *view)
-{
-	if (display->parent->dpt)
-		return display->parent->dpt->create(obj, view);
-
-	return 0;
-}
-
 /* fb_pin */
 int intel_parent_fb_pin_ggtt_pin(struct intel_display *display,
 				 struct drm_gem_object *obj,
diff --git a/drivers/gpu/drm/i915/display/intel_parent.h b/drivers/gpu/drm/i915/display/intel_parent.h
index e95710e115be..3185ac5ac478 100644
--- a/drivers/gpu/drm/i915/display/intel_parent.h
+++ b/drivers/gpu/drm/i915/display/intel_parent.h
@@ -13,7 +13,6 @@ struct drm_gem_object;
 struct drm_scanout_buffer;
 struct i915_vma;
 struct intel_display;
-struct intel_dpt;
 struct intel_fb_pin_params;
 struct intel_frontbuffer;
 struct intel_gtt_view;
@@ -22,11 +21,6 @@ struct intel_panic;
 struct intel_stolen_node;
 struct iosys_map;
 
-/* dpt */
-int intel_parent_dpt_create(struct intel_display *display,
-			    struct drm_gem_object *obj,
-			    const struct intel_gtt_view *view);
-
 /* fb_pin */
 int intel_parent_fb_pin_ggtt_pin(struct intel_display *display,
 				 struct drm_gem_object *obj,
diff --git a/drivers/gpu/drm/i915/i915_dpt.c b/drivers/gpu/drm/i915/i915_dpt.c
index 27f9a648bb26..53cb07144552 100644
--- a/drivers/gpu/drm/i915/i915_dpt.c
+++ b/drivers/gpu/drm/i915/i915_dpt.c
@@ -4,7 +4,6 @@
  */
 
 #include <drm/drm_print.h>
-#include <drm/intel/display_parent_interface.h>
 
 #include "gem/i915_gem_domain.h"
 #include "gem/i915_gem_internal.h"
@@ -222,8 +221,8 @@ struct intel_dpt *i915_dpt_lookup(struct drm_i915_gem_object *obj,
 	return dpt;
 }
 
-static void i915_dpt_add(struct drm_i915_gem_object *obj,
-			 struct intel_dpt *new_dpt)
+static struct intel_dpt *i915_dpt_add(struct drm_i915_gem_object *obj,
+				      struct intel_dpt *new_dpt)
 {
 	struct drm_i915_private *i915 = to_i915(obj->base.dev);
 	struct i915_ggtt *ggtt = to_gt(i915)->ggtt;
@@ -239,7 +238,7 @@ static void i915_dpt_add(struct drm_i915_gem_object *obj,
 	if (old_dpt) {
 		spin_unlock(&obj->dpt_lock);
 		i915_dpt_free(new_dpt);
-		return;
+		return old_dpt;
 	}
 
 	list_add_tail(&new_dpt->obj_link, &obj->dpt_list);
@@ -249,6 +248,8 @@ static void i915_dpt_add(struct drm_i915_gem_object *obj,
 	spin_lock(&ggtt->dpt_lock);
 	list_add_tail(&new_dpt->ggtt_link, &ggtt->dpt_list);
 	spin_unlock(&ggtt->dpt_lock);
+
+	return new_dpt;
 }
 
 static struct intel_dpt *dpt_create(struct drm_i915_gem_object *obj,
@@ -322,24 +323,21 @@ static struct intel_dpt *dpt_create(struct drm_i915_gem_object *obj,
 	return dpt;
 }
 
-static int i915_dpt_create(struct drm_gem_object *_obj,
-			   const struct intel_gtt_view *view)
+struct intel_dpt *i915_dpt_instance(struct drm_i915_gem_object *obj,
+				    const struct intel_gtt_view *view)
 {
-	struct drm_i915_gem_object *obj = to_intel_bo(_obj);
 	struct intel_dpt *dpt;
 
 	/* already have one? */
 	dpt = i915_dpt_lookup(obj, view);
 	if (dpt)
-		return 0;
+		return dpt;
 
 	dpt = dpt_create(obj, view);
 	if (IS_ERR(dpt))
-		return PTR_ERR(dpt);
+		return dpt;
 
-	i915_dpt_add(obj, dpt);
-
-	return 0;
+	return i915_dpt_add(obj, dpt);
 }
 
 void i915_dpt_obj_free(struct drm_i915_gem_object *obj)
@@ -418,7 +416,3 @@ u64 i915_dpt_offset(struct i915_vma *dpt_vma)
 {
 	return i915_vma_offset(dpt_vma);
 }
-
-const struct intel_display_dpt_interface i915_display_dpt_interface = {
-	.create = i915_dpt_create,
-};
diff --git a/drivers/gpu/drm/i915/i915_dpt.h b/drivers/gpu/drm/i915/i915_dpt.h
index 5e88d8881db1..3f05311a7e73 100644
--- a/drivers/gpu/drm/i915/i915_dpt.h
+++ b/drivers/gpu/drm/i915/i915_dpt.h
@@ -17,6 +17,8 @@ struct intel_dpt *i915_vm_to_dpt(struct i915_address_space *vm);
 void i915_dpt_obj_free(struct drm_i915_gem_object *obj);
 struct intel_dpt *i915_dpt_lookup(struct drm_i915_gem_object *obj,
 				  const struct intel_gtt_view *view);
+struct intel_dpt *i915_dpt_instance(struct drm_i915_gem_object *obj,
+				    const struct intel_gtt_view *view);
 
 struct i915_address_space *i915_dpt_to_vm(struct intel_dpt *dpt);
 struct i915_vma *i915_dpt_pin_to_ggtt(struct intel_dpt *dpt, unsigned int alignment);
@@ -26,6 +28,4 @@ u64 i915_dpt_offset(struct i915_vma *dpt_vma);
 void i915_dpt_suspend(struct i915_ggtt *ggtt);
 void i915_dpt_resume(struct i915_ggtt *ggtt);
 
-extern const struct intel_display_dpt_interface i915_display_dpt_interface;
-
 #endif /* __I915_DPT_H__ */
diff --git a/drivers/gpu/drm/i915/i915_driver.c b/drivers/gpu/drm/i915/i915_driver.c
index 56bca9301532..5c6fd0fc38cd 100644
--- a/drivers/gpu/drm/i915/i915_driver.c
+++ b/drivers/gpu/drm/i915/i915_driver.c
@@ -59,7 +59,6 @@
 #include "display/intel_display_power.h"
 #include "display/intel_dmc.h"
 #include "display/intel_dp.h"
-#include "display/intel_dpt.h"
 #include "display/intel_fbdev.h"
 #include "display/intel_gmbus.h"
 #include "display/intel_hotplug.h"
@@ -92,7 +91,6 @@
 #include "i915_bo.h"
 #include "i915_debugfs.h"
 #include "i915_display_pc8.h"
-#include "i915_dpt.h"
 #include "i915_driver.h"
 #include "i915_drm_client.h"
 #include "i915_drv.h"
@@ -746,7 +744,6 @@ static bool vgpu_active(struct drm_device *drm)
 
 static const struct intel_display_parent_interface parent = {
 	.bo = &i915_display_bo_interface,
-	.dpt = &i915_display_dpt_interface,
 	.dsb = &i915_display_dsb_interface,
 	.fb_pin = &i915_display_fb_pin_interface,
 	.frontbuffer = &i915_display_frontbuffer_interface,
diff --git a/drivers/gpu/drm/i915/i915_fb_pin.c b/drivers/gpu/drm/i915/i915_fb_pin.c
index 91385c17e564..831baf0c6898 100644
--- a/drivers/gpu/drm/i915/i915_fb_pin.c
+++ b/drivers/gpu/drm/i915/i915_fb_pin.c
@@ -259,9 +259,9 @@ static int i915_fb_pin_dpt_pin(struct drm_gem_object *_obj,
 	struct i915_vma *ggtt_vma, *dpt_vma;
 	struct intel_dpt *dpt;
 
-	dpt = i915_dpt_lookup(obj, pin_params->view);
-	if (drm_WARN_ON(obj->base.dev, !dpt))
-		return -EINVAL;
+	dpt = i915_dpt_instance(obj, pin_params->view);
+	if (IS_ERR(dpt))
+		return PTR_ERR(dpt);
 
 	ggtt_vma = i915_dpt_pin_to_ggtt(dpt, pin_params->alignment / 512);
 	if (IS_ERR(ggtt_vma))
diff --git a/include/drm/intel/display_parent_interface.h b/include/drm/intel/display_parent_interface.h
index d905d59cc43e..ef5c449808f6 100644
--- a/include/drm/intel/display_parent_interface.h
+++ b/include/drm/intel/display_parent_interface.h
@@ -17,7 +17,6 @@ struct drm_plane_state;
 struct drm_scanout_buffer;
 struct fb_info;
 struct i915_vma;
-struct intel_dpt;
 struct intel_dsb_buffer;
 struct intel_frontbuffer;
 struct intel_gtt_view;
@@ -65,11 +64,6 @@ struct intel_display_bo_interface {
 #endif
 };
 
-struct intel_display_dpt_interface {
-	int (*create)(struct drm_gem_object *obj,
-		      const struct intel_gtt_view *view);
-};
-
 struct intel_display_dsb_interface {
 	u32 (*ggtt_offset)(struct intel_dsb_buffer *dsb_buf);
 	void (*write)(struct intel_dsb_buffer *dsb_buf, u32 idx, u32 val);
@@ -247,9 +241,6 @@ struct intel_display_parent_interface {
 	/** @bo: BO interface */
 	const struct intel_display_bo_interface *bo;
 
-	/** @dpt: DPT interface. Optional. */
-	const struct intel_display_dpt_interface *dpt;
-
 	/** @dsb: DSB buffer interface */
 	const struct intel_display_dsb_interface *dsb;
 
-- 
2.56.0


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 12/13] drm/i915/dpt: Remove dpt->vma
  2026-11-11 11:19 [PATCH 00/13] drm/i915/dpt: Optimize i915 DPT Ville Syrjala
                   ` (10 preceding siblings ...)
  2026-11-11 11:20 ` [PATCH 11/13] drm/i915/dpt: Hide the DPT even more from the display code Ville Syrjala
@ 2026-11-11 11:20 ` Ville Syrjala
  2026-11-11 11:20 ` [PATCH 13/13] drm/i915/dpt: s/struct intel_dpt/struct i915_dpt/ Ville Syrjala
                   ` (4 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: Ville Syrjala @ 2026-11-11 11:20 UTC (permalink / raw)
  To: intel-gfx; +Cc: intel-xe

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

We don't actually have to keep the vma pointer around in the
dpt. It'll anyway be available in the caller (the fb unpin
code) so just get it from there instead of keeping it around.
This also makes the code a bit more uniform with the ggtt
counterpart.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/i915_dpt.c    | 8 +++-----
 drivers/gpu/drm/i915/i915_dpt.h    | 2 +-
 drivers/gpu/drm/i915/i915_fb_pin.c | 4 ++--
 3 files changed, 6 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_dpt.c b/drivers/gpu/drm/i915/i915_dpt.c
index 53cb07144552..4957e172340e 100644
--- a/drivers/gpu/drm/i915/i915_dpt.c
+++ b/drivers/gpu/drm/i915/i915_dpt.c
@@ -17,7 +17,6 @@ struct intel_dpt {
 	struct i915_address_space vm;
 
 	struct drm_i915_gem_object *obj;
-	struct i915_vma *vma;
 	void __iomem *iomem;
 	struct intel_gtt_view view;
 	struct list_head obj_link;
@@ -159,7 +158,6 @@ struct i915_vma *i915_dpt_pin_to_ggtt(struct intel_dpt *dpt, unsigned int alignm
 			continue;
 		}
 
-		dpt->vma = vma;
 		dpt->iomem = iomem;
 
 		i915_vma_get(vma);
@@ -172,10 +170,10 @@ struct i915_vma *i915_dpt_pin_to_ggtt(struct intel_dpt *dpt, unsigned int alignm
 	return err ? ERR_PTR(err) : vma;
 }
 
-void i915_dpt_unpin_from_ggtt(struct intel_dpt *dpt)
+void i915_dpt_unpin_from_ggtt(struct i915_vma *vma)
 {
-	i915_vma_unpin_iomap(dpt->vma);
-	i915_vma_put(dpt->vma);
+	i915_vma_unpin_iomap(vma);
+	i915_vma_put(vma);
 }
 
 static void i915_dpt_get(struct intel_dpt *dpt)
diff --git a/drivers/gpu/drm/i915/i915_dpt.h b/drivers/gpu/drm/i915/i915_dpt.h
index 3f05311a7e73..5fdd9923ca74 100644
--- a/drivers/gpu/drm/i915/i915_dpt.h
+++ b/drivers/gpu/drm/i915/i915_dpt.h
@@ -22,7 +22,7 @@ struct intel_dpt *i915_dpt_instance(struct drm_i915_gem_object *obj,
 
 struct i915_address_space *i915_dpt_to_vm(struct intel_dpt *dpt);
 struct i915_vma *i915_dpt_pin_to_ggtt(struct intel_dpt *dpt, unsigned int alignment);
-void i915_dpt_unpin_from_ggtt(struct intel_dpt *dpt);
+void i915_dpt_unpin_from_ggtt(struct i915_vma *vma);
 u64 i915_dpt_offset(struct i915_vma *dpt_vma);
 
 void i915_dpt_suspend(struct i915_ggtt *ggtt);
diff --git a/drivers/gpu/drm/i915/i915_fb_pin.c b/drivers/gpu/drm/i915/i915_fb_pin.c
index 831baf0c6898..81f5b0c4618a 100644
--- a/drivers/gpu/drm/i915/i915_fb_pin.c
+++ b/drivers/gpu/drm/i915/i915_fb_pin.c
@@ -269,7 +269,7 @@ static int i915_fb_pin_dpt_pin(struct drm_gem_object *_obj,
 
 	dpt_vma = intel_fb_pin_to_dpt(obj, dpt, pin_params);
 	if (IS_ERR(dpt_vma)) {
-		i915_dpt_unpin_from_ggtt(dpt);
+		i915_dpt_unpin_from_ggtt(ggtt_vma);
 		return PTR_ERR(dpt_vma);
 	}
 
@@ -304,7 +304,7 @@ static void i915_fb_pin_dpt_unpin(struct drm_gem_object *_obj,
 	drm_WARN_ON(obj->base.dev, !dpt_vma->vm->is_dpt);
 
 	intel_fb_unpin_vma(dpt_vma, -1);
-	i915_dpt_unpin_from_ggtt(dpt);
+	i915_dpt_unpin_from_ggtt(ggtt_vma);
 }
 
 static void i915_fb_pin_get_map(struct i915_vma *vma, struct iosys_map *map)
-- 
2.56.0


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 13/13] drm/i915/dpt: s/struct intel_dpt/struct i915_dpt/
  2026-11-11 11:19 [PATCH 00/13] drm/i915/dpt: Optimize i915 DPT Ville Syrjala
                   ` (11 preceding siblings ...)
  2026-11-11 11:20 ` [PATCH 12/13] drm/i915/dpt: Remove dpt->vma Ville Syrjala
@ 2026-11-11 11:20 ` Ville Syrjala
  2026-11-11 12:28 ` ✗ CI.checkpatch: warning for drm/i915/dpt: Optimize i915 DPT Patchwork
                   ` (3 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: Ville Syrjala @ 2026-11-11 11:20 UTC (permalink / raw)
  To: intel-gfx; +Cc: intel-xe

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

struct intel_dpt is now completely encased inside i915 code, so
rename it to struct i915_dpt.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/i915_dpt.c    | 60 +++++++++++++++---------------
 drivers/gpu/drm/i915/i915_dpt.h    | 16 ++++----
 drivers/gpu/drm/i915/i915_fb_pin.c |  6 +--
 3 files changed, 41 insertions(+), 41 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_dpt.c b/drivers/gpu/drm/i915/i915_dpt.c
index 4957e172340e..525c5c7d0815 100644
--- a/drivers/gpu/drm/i915/i915_dpt.c
+++ b/drivers/gpu/drm/i915/i915_dpt.c
@@ -13,7 +13,7 @@
 #include "i915_dpt.h"
 #include "i915_drv.h"
 
-struct intel_dpt {
+struct i915_dpt {
 	struct i915_address_space vm;
 
 	struct drm_i915_gem_object *obj;
@@ -23,14 +23,14 @@ struct intel_dpt {
 	struct list_head ggtt_link;
 };
 
-struct intel_dpt *i915_vm_to_dpt(struct i915_address_space *vm)
+struct i915_dpt *i915_vm_to_dpt(struct i915_address_space *vm)
 {
-	BUILD_BUG_ON(offsetof(struct intel_dpt, vm));
+	BUILD_BUG_ON(offsetof(struct i915_dpt, vm));
 	drm_WARN_ON(&vm->i915->drm, !vm->is_dpt);
-	return container_of(vm, struct intel_dpt, vm);
+	return container_of(vm, struct i915_dpt, vm);
 }
 
-struct i915_address_space *i915_dpt_to_vm(struct intel_dpt *dpt)
+struct i915_address_space *i915_dpt_to_vm(struct i915_dpt *dpt)
 {
 	return &dpt->vm;
 }
@@ -46,7 +46,7 @@ static void dpt_insert_page(struct i915_address_space *vm,
 			    unsigned int pat_index,
 			    u32 flags)
 {
-	struct intel_dpt *dpt = i915_vm_to_dpt(vm);
+	struct i915_dpt *dpt = i915_vm_to_dpt(vm);
 	gen8_pte_t __iomem *base = dpt->iomem;
 
 	gen8_set_pte(base + offset / I915_GTT_PAGE_SIZE,
@@ -58,7 +58,7 @@ static void dpt_insert_entries(struct i915_address_space *vm,
 			       unsigned int pat_index,
 			       u32 flags)
 {
-	struct intel_dpt *dpt = i915_vm_to_dpt(vm);
+	struct i915_dpt *dpt = i915_vm_to_dpt(vm);
 	gen8_pte_t __iomem *base = dpt->iomem;
 	const gen8_pte_t pte_encode = vm->pte_encode(0, pat_index, flags);
 	struct sgt_iter sgt_iter;
@@ -118,12 +118,12 @@ static void dpt_unbind_vma(struct i915_address_space *vm,
 
 static void dpt_cleanup(struct i915_address_space *vm)
 {
-	struct intel_dpt *dpt = i915_vm_to_dpt(vm);
+	struct i915_dpt *dpt = i915_vm_to_dpt(vm);
 
 	i915_gem_object_put(dpt->obj);
 }
 
-struct i915_vma *i915_dpt_pin_to_ggtt(struct intel_dpt *dpt, unsigned int alignment)
+struct i915_vma *i915_dpt_pin_to_ggtt(struct i915_dpt *dpt, unsigned int alignment)
 {
 	struct drm_i915_private *i915 = dpt->vm.i915;
 	struct ref_tracker *wakeref;
@@ -176,26 +176,26 @@ void i915_dpt_unpin_from_ggtt(struct i915_vma *vma)
 	i915_vma_put(vma);
 }
 
-static void i915_dpt_get(struct intel_dpt *dpt)
+static void i915_dpt_get(struct i915_dpt *dpt)
 {
 	i915_vm_get(&dpt->vm);
 }
 
-static void i915_dpt_put(struct intel_dpt *dpt)
+static void i915_dpt_put(struct i915_dpt *dpt)
 {
 	i915_vm_put(&dpt->vm);
 }
 
-static void i915_dpt_free(struct intel_dpt *dpt)
+static void i915_dpt_free(struct i915_dpt *dpt)
 {
 	dpt->obj->is_dpt = false;
 	i915_dpt_put(dpt);
 }
 
-static struct intel_dpt *__i915_dpt_lookup(struct drm_i915_gem_object *obj,
-					   const struct intel_gtt_view *view)
+static struct i915_dpt *__i915_dpt_lookup(struct drm_i915_gem_object *obj,
+					  const struct intel_gtt_view *view)
 {
-	struct intel_dpt *dpt;
+	struct i915_dpt *dpt;
 
 	lockdep_assert_held(&obj->dpt_lock);
 
@@ -207,10 +207,10 @@ static struct intel_dpt *__i915_dpt_lookup(struct drm_i915_gem_object *obj,
 	return NULL;
 }
 
-struct intel_dpt *i915_dpt_lookup(struct drm_i915_gem_object *obj,
-				  const struct intel_gtt_view *view)
+struct i915_dpt *i915_dpt_lookup(struct drm_i915_gem_object *obj,
+				 const struct intel_gtt_view *view)
 {
-	struct intel_dpt *dpt;
+	struct i915_dpt *dpt;
 
 	spin_lock(&obj->dpt_lock);
 	dpt = __i915_dpt_lookup(obj, view);
@@ -219,12 +219,12 @@ struct intel_dpt *i915_dpt_lookup(struct drm_i915_gem_object *obj,
 	return dpt;
 }
 
-static struct intel_dpt *i915_dpt_add(struct drm_i915_gem_object *obj,
-				      struct intel_dpt *new_dpt)
+static struct i915_dpt *i915_dpt_add(struct drm_i915_gem_object *obj,
+				     struct i915_dpt *new_dpt)
 {
 	struct drm_i915_private *i915 = to_i915(obj->base.dev);
 	struct i915_ggtt *ggtt = to_gt(i915)->ggtt;
-	struct intel_dpt *old_dpt;
+	struct i915_dpt *old_dpt;
 
 	spin_lock(&obj->dpt_lock);
 
@@ -250,14 +250,14 @@ static struct intel_dpt *i915_dpt_add(struct drm_i915_gem_object *obj,
 	return new_dpt;
 }
 
-static struct intel_dpt *dpt_create(struct drm_i915_gem_object *obj,
-				    const struct intel_gtt_view *view)
+static struct i915_dpt *dpt_create(struct drm_i915_gem_object *obj,
+				   const struct intel_gtt_view *view)
 {
 	struct drm_i915_private *i915 = to_i915(obj->base.dev);
 	struct i915_ggtt *ggtt = to_gt(i915)->ggtt;
 	struct drm_i915_gem_object *dpt_obj;
 	struct i915_address_space *vm;
-	struct intel_dpt *dpt;
+	struct i915_dpt *dpt;
 	size_t size;
 	int ret;
 
@@ -321,10 +321,10 @@ static struct intel_dpt *dpt_create(struct drm_i915_gem_object *obj,
 	return dpt;
 }
 
-struct intel_dpt *i915_dpt_instance(struct drm_i915_gem_object *obj,
-				    const struct intel_gtt_view *view)
+struct i915_dpt *i915_dpt_instance(struct drm_i915_gem_object *obj,
+				   const struct intel_gtt_view *view)
 {
-	struct intel_dpt *dpt;
+	struct i915_dpt *dpt;
 
 	/* already have one? */
 	dpt = i915_dpt_lookup(obj, view);
@@ -342,7 +342,7 @@ void i915_dpt_obj_free(struct drm_i915_gem_object *obj)
 {
 	struct drm_i915_private *i915 = to_i915(obj->base.dev);
 	struct i915_ggtt *ggtt = to_gt(i915)->ggtt;
-	struct intel_dpt *dpt, *next;
+	struct i915_dpt *dpt, *next;
 	LIST_HEAD(dpt_list);
 
 	spin_lock(&obj->dpt_lock);
@@ -364,7 +364,7 @@ void i915_dpt_suspend(struct i915_ggtt *ggtt)
 	LIST_HEAD(dpt_list);
 
 	for (;;) {
-		struct intel_dpt *dpt;
+		struct i915_dpt *dpt;
 
 		spin_lock(&ggtt->dpt_lock);
 
@@ -395,7 +395,7 @@ void i915_dpt_suspend(struct i915_ggtt *ggtt)
 
 void i915_dpt_resume(struct i915_ggtt *ggtt)
 {
-	struct intel_dpt *dpt;
+	struct i915_dpt *dpt;
 
 	/*
 	 * i915_ggtt_resume_vm() with evict_all==true
diff --git a/drivers/gpu/drm/i915/i915_dpt.h b/drivers/gpu/drm/i915/i915_dpt.h
index 5fdd9923ca74..42620dbcc84e 100644
--- a/drivers/gpu/drm/i915/i915_dpt.h
+++ b/drivers/gpu/drm/i915/i915_dpt.h
@@ -8,20 +8,20 @@
 
 struct drm_i915_gem_object;
 struct i915_address_space;
+struct i915_dpt;
 struct i915_ggtt;
 struct i915_vma;
-struct intel_dpt;
 struct intel_gtt_view;
 
-struct intel_dpt *i915_vm_to_dpt(struct i915_address_space *vm);
+struct i915_dpt *i915_vm_to_dpt(struct i915_address_space *vm);
 void i915_dpt_obj_free(struct drm_i915_gem_object *obj);
-struct intel_dpt *i915_dpt_lookup(struct drm_i915_gem_object *obj,
-				  const struct intel_gtt_view *view);
-struct intel_dpt *i915_dpt_instance(struct drm_i915_gem_object *obj,
-				    const struct intel_gtt_view *view);
+struct i915_dpt *i915_dpt_lookup(struct drm_i915_gem_object *obj,
+				 const struct intel_gtt_view *view);
+struct i915_dpt *i915_dpt_instance(struct drm_i915_gem_object *obj,
+				   const struct intel_gtt_view *view);
 
-struct i915_address_space *i915_dpt_to_vm(struct intel_dpt *dpt);
-struct i915_vma *i915_dpt_pin_to_ggtt(struct intel_dpt *dpt, unsigned int alignment);
+struct i915_address_space *i915_dpt_to_vm(struct i915_dpt *dpt);
+struct i915_vma *i915_dpt_pin_to_ggtt(struct i915_dpt *dpt, unsigned int alignment);
 void i915_dpt_unpin_from_ggtt(struct i915_vma *vma);
 u64 i915_dpt_offset(struct i915_vma *dpt_vma);
 
diff --git a/drivers/gpu/drm/i915/i915_fb_pin.c b/drivers/gpu/drm/i915/i915_fb_pin.c
index 81f5b0c4618a..0ee561d07211 100644
--- a/drivers/gpu/drm/i915/i915_fb_pin.c
+++ b/drivers/gpu/drm/i915/i915_fb_pin.c
@@ -15,7 +15,7 @@
 #include "i915_vma.h"
 
 static struct i915_vma *
-intel_fb_pin_to_dpt(struct drm_i915_gem_object *obj, struct intel_dpt *dpt,
+intel_fb_pin_to_dpt(struct drm_i915_gem_object *obj, struct i915_dpt *dpt,
 		    const struct intel_fb_pin_params *pin_params)
 {
 	struct drm_i915_private *i915 = to_i915(obj->base.dev);
@@ -257,7 +257,7 @@ static int i915_fb_pin_dpt_pin(struct drm_gem_object *_obj,
 {
 	struct drm_i915_gem_object *obj = to_intel_bo(_obj);
 	struct i915_vma *ggtt_vma, *dpt_vma;
-	struct intel_dpt *dpt;
+	struct i915_dpt *dpt;
 
 	dpt = i915_dpt_instance(obj, pin_params->view);
 	if (IS_ERR(dpt))
@@ -289,7 +289,7 @@ static void i915_fb_pin_dpt_unpin(struct drm_gem_object *_obj,
 {
 	struct drm_i915_gem_object *obj = to_intel_bo(_obj);
 	struct i915_vma *dpt_vma;
-	struct intel_dpt *dpt;
+	struct i915_dpt *dpt;
 
 	dpt = i915_dpt_lookup(obj, view);
 	if (drm_WARN_ON(obj->base.dev, !dpt))
-- 
2.56.0


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* Re: [PATCH 06/13] drm/i915/dpt: Compute DPT size in the DPT code
  2026-11-11 11:20 ` [PATCH 06/13] drm/i915/dpt: Compute DPT size in the DPT code Ville Syrjala
@ 2026-11-11 11:31   ` sashiko-bot
  2026-11-11 12:39     ` Ville Syrjälä
  0 siblings, 1 reply; 20+ messages in thread
From: sashiko-bot @ 2026-11-11 11:31 UTC (permalink / raw)
  To: Ville Syrjala, intel-gfx; +Cc: intel-xe

Thank you for your contribution! Sashiko AI review found no new issues
in this patch, but noticed 1 related pre-existing issue it does not
introduce:
- [High] drm/xe/display: double BO unpin on __intel_fbdev_fb_alloc()
  error path [1]
--

commit ae1435739339ed58396679163558aae13db1d253
Author: Ville Syrjälä <ville.syrjala@linux.intel.com>

drm/i915/dpt: Compute DPT size in the DPT code

This commit passes the GTT view instead of a precomputed size to
intel_parent_dpt_create() so that the DPT code computes the DPT size for
both normal and remapped views.

> diff --git a/drivers/gpu/drm/i915/display/intel_fb.c b/drivers/gpu/drm/i915/display/intel_fb.c
> index b3344e3f187fb..35f1d5dd31d7d 100644
> --- a/drivers/gpu/drm/i915/display/intel_fb.c
> +++ b/drivers/gpu/drm/i915/display/intel_fb.c
> @@ -2275,13 +2275,15 @@ int intel_framebuffer_init(struct intel_framebuffer *intel_fb,
>  
>  	if (intel_fb_uses_dpt(fb)) {
>  		struct drm_gem_object *obj = intel_fb_bo(&intel_fb->base);
> +		const struct intel_gtt_view *view;
>  		struct intel_dpt *dpt;
> -		size_t size = 0;
>  
>  		if (intel_fb_needs_pot_stride_remap(intel_fb))
> -			size = intel_remapped_info_size(&intel_fb->remapped_view.gtt.remapped);
> +			view = &intel_fb->remapped_view.gtt;
> +		else
> +			view = &intel_fb->normal_view.gtt;
>  
> -		dpt = intel_parent_dpt_create(display, obj, size);
> +		dpt = intel_parent_dpt_create(display, obj, view);
>  		if (IS_ERR(dpt)) {
>  			drm_dbg_kms(display->drm, "failed to create DPT\n");
>  			ret = PTR_ERR(dpt);

[Severity: High]
This problem wasn't introduced by this patch, but can failing in
intel_framebuffer_init() after intel_bo_framebuffer_init() cause a double
BO unpin on Xe when called from __intel_fbdev_fb_alloc() [1]?

In __intel_fbdev_fb_alloc(), intel_bo_fbdev_create() allocates the BO via
xe_bo_create_pin_map_novm() with XE_BO_FLAG_PINNED set and a pin count of
1, and xe_display_bo_framebuffer_init() only takes a reference without
pinning it again.  If a later step in intel_framebuffer_init() fails and
jumps to err_bo_framebuffer_fini, xe_display_bo_framebuffer_fini() sees
XE_BO_FLAG_PINNED and unpins the BO:

drivers/gpu/drm/xe/display/xe_display_bo.c:xe_display_bo_framebuffer_fini() {
	struct xe_bo *bo = gem_to_xe_bo(obj);

	if (bo->flags & XE_BO_FLAG_PINNED) {
		/* Unpin our kernel fb first */
		xe_bo_lock(bo, false);
		xe_bo_unpin(bo);
		xe_bo_unlock(bo);
	}
	xe_bo_put(bo);
}

When control returns to __intel_fbdev_fb_alloc(), error handling calls
intel_bo_fbdev_destroy() -> xe_display_bo_fbdev_destroy() ->
xe_bo_unpin_map_no_vm(), which unpins the BO a second time, triggering
assertions in xe_bo_unpin() and underflowing bo->pin_count in
ttm_bo_unpin().

[1] https://sashiko.dev/#/bug/linux-227b0044-5f2a-4c7c-81e6-93b67cb4f477

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20261111112007.16790-1-ville.syrjala@linux.intel.com?part=6

^ permalink raw reply	[flat|nested] 20+ messages in thread

* ✗ CI.checkpatch: warning for drm/i915/dpt: Optimize i915 DPT
  2026-11-11 11:19 [PATCH 00/13] drm/i915/dpt: Optimize i915 DPT Ville Syrjala
                   ` (12 preceding siblings ...)
  2026-11-11 11:20 ` [PATCH 13/13] drm/i915/dpt: s/struct intel_dpt/struct i915_dpt/ Ville Syrjala
@ 2026-11-11 12:28 ` Patchwork
  2026-11-11 12:30 ` ✓ CI.KUnit: success " Patchwork
                   ` (2 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: Patchwork @ 2026-11-11 12:28 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: intel-xe

== Series Details ==

Series: drm/i915/dpt: Optimize i915 DPT
URL   : https://patchwork.freedesktop.org/series/178310/
State : warning

== Summary ==

+ KERNEL=/kernel
+ git clone https://gitlab.freedesktop.org/drm/maintainer-tools mt
Cloning into 'mt'...
warning: redirecting to https://gitlab.freedesktop.org/drm/maintainer-tools.git/
+ git -C mt rev-list -n1 origin/master
3009867cd31863246e4afc138520a7a8bd37bb11
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ git log -n1
commit 4a974e0e402cc9dc95e02a0d078c3e0ecfe0ecdb
Author: Ville Syrjälä <ville.syrjala@linux.intel.com>
Date:   Wed Nov 11 13:20:07 2026 +0200

    drm/i915/dpt: s/struct intel_dpt/struct i915_dpt/
    
    struct intel_dpt is now completely encased inside i915 code, so
    rename it to struct i915_dpt.
    
    Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
+ /mt/dim checkpatch d5036074d7760ba3ee4a3d63e88c662f505da3cf drm-intel
dbfc08cff230 drm/i915: Bump surface alignment to 32k on MTL for async flips
-:45: WARNING:MISSING_FIXES_TAG: The commit message has 'stable@', perhaps it also needs a 'Fixes:' tag?

total: 0 errors, 1 warnings, 0 checks, 15 lines checked
3aba2fed0cfa drm/i915/fb: Fix error handling onion in intel_framebuffer_init()
575b752f9482 drm/i915/dpt: Stop allocation DPTs from stolen
fce87d034f58 drm/i915/fb_pin: Remove overzealous vma NULL checks
c99fba5b8967 drm/i915: intel_{remapped, rotation}_info_size() into intel/gtt_view_types.h
18748d8d85fa drm/i915/dpt: Compute DPT size in the DPT code
ccb9afc6947e drm/i915/vma: Extract intel_gtt_view_compare()
-:74: WARNING:AVOID_BUG: Do not crash the kernel unless it is absolutely unavoidable--use WARN_ON_ONCE() plus recovery code (if feasible) instead of BUG() or variants
#74: FILE: drivers/gpu/drm/i915/i915_vma.h:252:
+	GEM_BUG_ON(view && !i915_is_ggtt_or_dpt(vm));

total: 0 errors, 1 warnings, 0 checks, 63 lines checked
8c9b05e88884 drm/i915/vma: Introduce i915_vma_lookup()
-:57: WARNING:AVOID_BUG: Do not crash the kernel unless it is absolutely unavoidable--use WARN_ON_ONCE() plus recovery code (if feasible) instead of BUG() or variants
#57: FILE: drivers/gpu/drm/i915/i915_vma.c:330:
+	GEM_BUG_ON(view && !i915_is_ggtt_or_dpt(vm));

-:58: WARNING:AVOID_BUG: Do not crash the kernel unless it is absolutely unavoidable--use WARN_ON_ONCE() plus recovery code (if feasible) instead of BUG() or variants
#58: FILE: drivers/gpu/drm/i915/i915_vma.c:331:
+	GEM_BUG_ON(!kref_read(&vm->ref));

total: 0 errors, 2 warnings, 0 checks, 69 lines checked
da8ec096b283 drm/i915/dpt: Make i915_dpt_{suspend, resume}() internal to i915
fcc4d8f6e070 drm/i915/dpt: Cache DPTs in the gem object
42e1b4bc03b6 drm/i915/dpt: Hide the DPT even more from the display code
80194fe13ee8 drm/i915/dpt: Remove dpt->vma
4a974e0e402c drm/i915/dpt: s/struct intel_dpt/struct i915_dpt/



^ permalink raw reply	[flat|nested] 20+ messages in thread

* ✓ CI.KUnit: success for drm/i915/dpt: Optimize i915 DPT
  2026-11-11 11:19 [PATCH 00/13] drm/i915/dpt: Optimize i915 DPT Ville Syrjala
                   ` (13 preceding siblings ...)
  2026-11-11 12:28 ` ✗ CI.checkpatch: warning for drm/i915/dpt: Optimize i915 DPT Patchwork
@ 2026-11-11 12:30 ` Patchwork
  2026-11-11 13:05 ` ✓ Xe.CI.BAT: " Patchwork
  2026-11-11 20:29 ` ✓ Xe.CI.FULL: " Patchwork
  16 siblings, 0 replies; 20+ messages in thread
From: Patchwork @ 2026-11-11 12:30 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: intel-xe

== Series Details ==

Series: drm/i915/dpt: Optimize i915 DPT
URL   : https://patchwork.freedesktop.org/series/178310/
State : success

== Summary ==

+ trap cleanup EXIT
+ kunitconfigs=('/kernel/drivers/gpu/tests/.kunitconfig' '/kernel/drivers/gpu/drm/xe/.kunitconfig' '/kernel/drivers/gpu/drm/tests/.kunitconfig' '/kernel/drivers/gpu/drm/ttm/tests/.kunitconfig' '/kernel/drivers/dma-buf/.kunitconfig')
+ for kcfg in "${kunitconfigs[@]}"
+ [[ ! -f /kernel/drivers/gpu/tests/.kunitconfig ]]
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/tests/.kunitconfig
[12:28:06] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[12:28:11] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[12:28:31] Starting KUnit Kernel (1/1)...
[12:28:31] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[12:28:31] ================= gpu_buddy (14 subtests) ==================
[12:28:31] [PASSED] gpu_test_buddy_alloc_limit
[12:28:31] [PASSED] gpu_test_buddy_alloc_optimistic
[12:28:31] [PASSED] gpu_test_buddy_alloc_pessimistic
[12:28:31] [PASSED] gpu_test_buddy_alloc_pathological
[12:28:31] [PASSED] gpu_test_buddy_alloc_contiguous
[12:28:31] [PASSED] gpu_test_buddy_alloc_clear
[12:28:31] [PASSED] gpu_test_buddy_alloc_range
[12:28:32] [PASSED] gpu_test_buddy_alloc_range_bias
[12:28:33] [PASSED] gpu_test_buddy_fragmentation_performance
[12:28:33] [PASSED] gpu_test_buddy_dirty_tracker_performance
[12:28:33] [PASSED] gpu_test_buddy_alloc_exceeds_max_order
[12:28:33] [PASSED] gpu_test_buddy_offset_aligned_allocation
[12:28:33] [PASSED] gpu_test_buddy_subtree_offset_alignment_stress
[12:28:33] [PASSED] gpu_test_buddy_addr_to_block
[12:28:33] ==================== [PASSED] gpu_buddy ====================
[12:28:33] ============================================================
[12:28:33] Testing complete. Ran 14 tests: passed: 14
[12:28:33] Elapsed time: 27.363s total, 4.998s configuring, 20.448s building, 1.875s running

+ for kcfg in "${kunitconfigs[@]}"
+ [[ ! -f /kernel/drivers/gpu/drm/xe/.kunitconfig ]]
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[12:28:33] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[12:28:36] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[12:29:14] Starting KUnit Kernel (1/1)...
[12:29:14] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[12:29:14] ================== guc_buf (11 subtests) ===================
[12:29:14] [PASSED] test_smallest
[12:29:14] [PASSED] test_largest
[12:29:14] [PASSED] test_granular
[12:29:14] [PASSED] test_unique
[12:29:14] [PASSED] test_overlap
[12:29:14] [PASSED] test_reusable
[12:29:14] [PASSED] test_too_big
[12:29:14] [PASSED] test_flush
[12:29:14] [PASSED] test_lookup
[12:29:14] [PASSED] test_data
[12:29:14] [PASSED] test_class
[12:29:14] ===================== [PASSED] guc_buf =====================
[12:29:14] =================== guc_dbm (7 subtests) ===================
[12:29:14] [PASSED] test_empty
[12:29:14] [PASSED] test_default
[12:29:14] ======================== test_size  ========================
[12:29:14] [PASSED] 4
[12:29:14] [PASSED] 8
[12:29:14] [PASSED] 32
[12:29:14] [PASSED] 256
[12:29:14] ==================== [PASSED] test_size ====================
[12:29:14] ======================= test_reuse  ========================
[12:29:14] [PASSED] 4
[12:29:14] [PASSED] 8
[12:29:14] [PASSED] 32
[12:29:14] [PASSED] 256
[12:29:14] =================== [PASSED] test_reuse ====================
[12:29:14] =================== test_range_overlap  ====================
[12:29:14] [PASSED] 4
[12:29:14] [PASSED] 8
[12:29:14] [PASSED] 32
[12:29:14] [PASSED] 256
[12:29:14] =============== [PASSED] test_range_overlap ================
[12:29:14] =================== test_range_compact  ====================
[12:29:14] [PASSED] 4
[12:29:14] [PASSED] 8
[12:29:14] [PASSED] 32
[12:29:14] [PASSED] 256
[12:29:14] =============== [PASSED] test_range_compact ================
[12:29:14] ==================== test_range_spare  =====================
[12:29:14] [PASSED] 4
[12:29:14] [PASSED] 8
[12:29:14] [PASSED] 32
[12:29:14] [PASSED] 256
[12:29:14] ================ [PASSED] test_range_spare =================
[12:29:14] ===================== [PASSED] guc_dbm =====================
[12:29:14] ================== guc_idm (22 subtests) ===================
[12:29:14] [PASSED] bad_init
[12:29:14] [PASSED] no_init
[12:29:14] [PASSED] init_fini
[12:29:14] [PASSED] check_init_small
[12:29:14] [PASSED] check_init_shared
[12:29:14] [PASSED] check_used
[12:29:14] [PASSED] check_quota
[12:29:14] [PASSED] check_all
[12:29:14] [PASSED] check_limits
[12:29:14] [PASSED] check_overlap
[12:29:14] [PASSED] check_overlap_alloc
[12:29:14] [PASSED] check_overlap_release
[12:29:14] [PASSED] check_overlap_partial_init
[12:29:14] [PASSED] check_overlap_partial_shared_range_blocking
[12:29:14] [PASSED] check_used_usable
[12:29:14] [PASSED] check_used_shareable
[12:29:14] [PASSED] check_used_mixed
[12:29:14] [PASSED] check_release_usable_range
[12:29:14] [PASSED] check_release_shareable_range
[12:29:14] [PASSED] check_split_boundaries
[12:29:14] [PASSED] check_shareable_spare
[12:29:14] [PASSED] check_shareable_spare_fragmented_tail
[12:29:14] ===================== [PASSED] guc_idm =====================
[12:29:14] ============== guc_klv_helpers (13 subtests) ===============
[12:29:14] [PASSED] test_count
[12:29:14] [PASSED] test_encode_u32
[12:29:14] [PASSED] test_encode_u64
[12:29:14] [PASSED] test_encode_string
[12:29:14] [PASSED] test_encode_object_raw
[12:29:14] [PASSED] test_encode_object_klv
[12:29:14] [PASSED] test_encode_object_nested
[12:29:14] [PASSED] test_encode_object_basic
[12:29:14] ===================== test_decode_u16  =====================
[12:29:14] [PASSED] empty
[12:29:14] [PASSED] valid
[12:29:14] [PASSED] max
[12:29:14] [PASSED] big
[12:29:14] [PASSED] long
[12:29:14] ================= [PASSED] test_decode_u16 =================
[12:29:14] ===================== test_decode_u32  =====================
[12:29:14] [PASSED] empty
[12:29:14] [PASSED] valid
[12:29:14] [PASSED] max
[12:29:14] [PASSED] long
[12:29:14] ================= [PASSED] test_decode_u32 =================
[12:29:14] ===================== test_decode_u64  =====================
[12:29:14] [PASSED] empty
[12:29:14] [PASSED] short
[12:29:14] [PASSED] valid
[12:29:14] [PASSED] max
[12:29:14] [PASSED] long
[12:29:14] ================= [PASSED] test_decode_u64 =================
[12:29:14] ===================== test_decode_str  =====================
[12:29:14] [PASSED] empty
[12:29:14] [PASSED] one
[12:29:14] [PASSED] one_trash
[12:29:14] [PASSED] two
[12:29:14] [PASSED] two_trash
[12:29:14] [PASSED] three
[12:29:14] [PASSED] dword
[12:29:14] [PASSED] four
[12:29:14] [PASSED] five
[12:29:14] [PASSED] six
[12:29:14] [PASSED] seven
[12:29:14] [PASSED] qword
[12:29:14] ================= [PASSED] test_decode_str =================
[12:29:14] [PASSED] test_print
[12:29:14] ================= [PASSED] guc_klv_helpers =================
[12:29:14] =================== xe_log (4 subtests) ====================
[12:29:14] [PASSED] demo_cper
[12:29:14] [PASSED] demo_dmesg
[12:29:14] ======================= test_dmesg  ========================
[12:29:14] [PASSED] test_fatal
[12:29:14] [PASSED] test_fatal_tile
[12:29:14] [PASSED] test_fatal_gt
[12:29:14] [PASSED] test_fatal_comp
[12:29:14] [PASSED] test_fatal_comp_tile
[12:29:15] [PASSED] test_fatal_comp_gt
[12:29:15] [PASSED] test_fatal_all
[12:29:15] [PASSED] test_recoverable
[12:29:15] [PASSED] test_recoverable_tile
[12:29:15] [PASSED] test_recoverable_gt
[12:29:15] [PASSED] test_recoverable_comp
[12:29:15] [PASSED] test_recoverable_comp_tile
[12:29:15] [PASSED] test_recoverable_comp_gt
[12:29:15] [PASSED] test_recoverable_all
[12:29:15] [PASSED] test_info
[12:29:15] [PASSED] test_info_tile
[12:29:15] [PASSED] test_info_gt
[12:29:15] [PASSED] test_info_err
[12:29:15] [PASSED] test_info_comp
[12:29:15] [PASSED] test_info_comp_tile
[12:29:15] [PASSED] test_info_comp_gt
[12:29:15] [PASSED] test_info_all
[12:29:15] [PASSED] test_hw_fatal
[12:29:15] [PASSED] test_hw_recoverable
[12:29:15] [PASSED] test_hw_corrected
[12:29:15] [PASSED] test_hw_informational
[12:29:15] =================== [PASSED] test_dmesg ====================
[12:29:15] ====================== test_invalid  =======================
[12:29:15] [SKIPPED] no-component no-location no-warn (requires CONFIG_DRM_XE_DEBUG)
[12:29:15] [SKIPPED] reserved location (requires CONFIG_DRM_XE_DEBUG)
[12:29:15] [SKIPPED] unknown location (requires CONFIG_DRM_XE_DEBUG)
[12:29:15] [SKIPPED] nonzero-device-id location (requires CONFIG_DRM_XE_DEBUG)
[12:29:15] [SKIPPED] invalid-tile-id location (requires CONFIG_DRM_XE_DEBUG)
[12:29:15] [SKIPPED] invalid-gt-id location (requires CONFIG_DRM_XE_DEBUG)
[12:29:15] [SKIPPED] unknown component class (requires CONFIG_DRM_XE_DEBUG)
[12:29:15] [SKIPPED] unknown system component (requires CONFIG_DRM_XE_DEBUG)
[12:29:15] [SKIPPED] unknown hardware component (requires CONFIG_DRM_XE_DEBUG)
[12:29:15] [SKIPPED] unknown component and location (requires CONFIG_DRM_XE_DEBUG)
[12:29:15] ================== [SKIPPED] test_invalid ==================
[12:29:15] ===================== [PASSED] xe_log ======================
[12:29:15] ================== no_relay (3 subtests) ===================
[12:29:15] [PASSED] xe_drops_guc2pf_if_not_ready
[12:29:15] [PASSED] xe_drops_guc2vf_if_not_ready
[12:29:15] [PASSED] xe_rejects_send_if_not_ready
[12:29:15] ==================== [PASSED] no_relay =====================
[12:29:15] ================== pf_relay (14 subtests) ==================
[12:29:15] [PASSED] pf_rejects_guc2pf_too_short
[12:29:15] [PASSED] pf_rejects_guc2pf_too_long
[12:29:15] [PASSED] pf_rejects_guc2pf_no_payload
[12:29:15] [PASSED] pf_fails_no_payload
[12:29:15] [PASSED] pf_fails_bad_origin
[12:29:15] [PASSED] pf_fails_bad_type
[12:29:15] [PASSED] pf_txn_reports_error
[12:29:15] [PASSED] pf_txn_sends_pf2guc
[12:29:15] [PASSED] pf_sends_pf2guc
[12:29:15] [SKIPPED] pf_loopback_nop (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[12:29:15] [SKIPPED] pf_loopback_echo (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[12:29:15] [SKIPPED] pf_loopback_fail (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[12:29:15] [SKIPPED] pf_loopback_busy (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[12:29:15] [SKIPPED] pf_loopback_retry (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[12:29:15] ==================== [PASSED] pf_relay =====================
[12:29:15] ================== vf_relay (3 subtests) ===================
[12:29:15] [PASSED] vf_rejects_guc2vf_too_short
[12:29:15] [PASSED] vf_rejects_guc2vf_too_long
[12:29:15] [PASSED] vf_rejects_guc2vf_no_payload
[12:29:15] ==================== [PASSED] vf_relay =====================
[12:29:15] ================ pf_gt_config (9 subtests) =================
[12:29:15] [PASSED] fair_contexts_1vf
[12:29:15] [PASSED] fair_doorbells_1vf
[12:29:15] [PASSED] fair_ggtt_1vf
[12:29:15] ====================== fair_vram_1vf  ======================
[12:29:15] [PASSED] 3.50 GiB
[12:29:15] [PASSED] 11.5 GiB
[12:29:15] [PASSED] 15.5 GiB
[12:29:15] [PASSED] 31.5 GiB
[12:29:15] [PASSED] 63.5 GiB
[12:29:15] [PASSED] 1.91 GiB
[12:29:15] ================== [PASSED] fair_vram_1vf ==================
[12:29:15] ================ fair_vram_1vf_admin_only  =================
[12:29:15] [PASSED] 3.50 GiB
[12:29:15] [PASSED] 11.5 GiB
[12:29:15] [PASSED] 15.5 GiB
[12:29:15] [PASSED] 31.5 GiB
[12:29:15] [PASSED] 63.5 GiB
[12:29:15] [PASSED] 1.91 GiB
[12:29:15] ============ [PASSED] fair_vram_1vf_admin_only =============
[12:29:15] ====================== fair_contexts  ======================
[12:29:15] [PASSED] 1 VF
[12:29:15] [PASSED] 2 VFs
[12:29:15] [PASSED] 3 VFs
[12:29:15] [PASSED] 4 VFs
[12:29:15] [PASSED] 5 VFs
[12:29:15] [PASSED] 6 VFs
[12:29:15] [PASSED] 7 VFs
[12:29:15] [PASSED] 8 VFs
[12:29:15] [PASSED] 9 VFs
[12:29:15] [PASSED] 10 VFs
[12:29:15] [PASSED] 11 VFs
[12:29:15] [PASSED] 12 VFs
[12:29:15] [PASSED] 13 VFs
[12:29:15] [PASSED] 14 VFs
[12:29:15] [PASSED] 15 VFs
[12:29:15] [PASSED] 16 VFs
[12:29:15] [PASSED] 17 VFs
[12:29:15] [PASSED] 18 VFs
[12:29:15] [PASSED] 19 VFs
[12:29:15] [PASSED] 20 VFs
[12:29:15] [PASSED] 21 VFs
[12:29:15] [PASSED] 22 VFs
[12:29:15] [PASSED] 23 VFs
[12:29:15] [PASSED] 24 VFs
[12:29:15] [PASSED] 25 VFs
[12:29:15] [PASSED] 26 VFs
[12:29:15] [PASSED] 27 VFs
[12:29:15] [PASSED] 28 VFs
[12:29:15] [PASSED] 29 VFs
[12:29:15] [PASSED] 30 VFs
[12:29:15] [PASSED] 31 VFs
[12:29:15] [PASSED] 32 VFs
[12:29:15] [PASSED] 33 VFs
[12:29:15] [PASSED] 34 VFs
[12:29:15] [PASSED] 35 VFs
[12:29:15] [PASSED] 36 VFs
[12:29:15] [PASSED] 37 VFs
[12:29:15] [PASSED] 38 VFs
[12:29:15] [PASSED] 39 VFs
[12:29:15] [PASSED] 40 VFs
[12:29:15] [PASSED] 41 VFs
[12:29:15] [PASSED] 42 VFs
[12:29:15] [PASSED] 43 VFs
[12:29:15] [PASSED] 44 VFs
[12:29:15] [PASSED] 45 VFs
[12:29:15] [PASSED] 46 VFs
[12:29:15] [PASSED] 47 VFs
[12:29:15] [PASSED] 48 VFs
[12:29:15] [PASSED] 49 VFs
[12:29:15] [PASSED] 50 VFs
[12:29:15] [PASSED] 51 VFs
[12:29:15] [PASSED] 52 VFs
[12:29:15] [PASSED] 53 VFs
[12:29:15] [PASSED] 54 VFs
[12:29:15] [PASSED] 55 VFs
[12:29:15] [PASSED] 56 VFs
[12:29:15] [PASSED] 57 VFs
[12:29:15] [PASSED] 58 VFs
[12:29:15] [PASSED] 59 VFs
[12:29:15] [PASSED] 60 VFs
[12:29:15] [PASSED] 61 VFs
[12:29:15] [PASSED] 62 VFs
[12:29:15] [PASSED] 63 VFs
[12:29:15] ================== [PASSED] fair_contexts ==================
[12:29:15] ===================== fair_doorbells  ======================
[12:29:15] [PASSED] 1 VF
[12:29:15] [PASSED] 2 VFs
[12:29:15] [PASSED] 3 VFs
[12:29:15] [PASSED] 4 VFs
[12:29:15] [PASSED] 5 VFs
[12:29:15] [PASSED] 6 VFs
[12:29:15] [PASSED] 7 VFs
[12:29:15] [PASSED] 8 VFs
[12:29:15] [PASSED] 9 VFs
[12:29:15] [PASSED] 10 VFs
[12:29:15] [PASSED] 11 VFs
[12:29:15] [PASSED] 12 VFs
[12:29:15] [PASSED] 13 VFs
[12:29:15] [PASSED] 14 VFs
[12:29:15] [PASSED] 15 VFs
[12:29:15] [PASSED] 16 VFs
[12:29:15] [PASSED] 17 VFs
[12:29:15] [PASSED] 18 VFs
[12:29:15] [PASSED] 19 VFs
[12:29:15] [PASSED] 20 VFs
[12:29:15] [PASSED] 21 VFs
[12:29:15] [PASSED] 22 VFs
[12:29:15] [PASSED] 23 VFs
[12:29:15] [PASSED] 24 VFs
[12:29:15] [PASSED] 25 VFs
[12:29:15] [PASSED] 26 VFs
[12:29:15] [PASSED] 27 VFs
[12:29:15] [PASSED] 28 VFs
[12:29:15] [PASSED] 29 VFs
[12:29:15] [PASSED] 30 VFs
[12:29:15] [PASSED] 31 VFs
[12:29:15] [PASSED] 32 VFs
[12:29:15] [PASSED] 33 VFs
[12:29:15] [PASSED] 34 VFs
[12:29:15] [PASSED] 35 VFs
[12:29:15] [PASSED] 36 VFs
[12:29:15] [PASSED] 37 VFs
[12:29:15] [PASSED] 38 VFs
[12:29:15] [PASSED] 39 VFs
[12:29:15] [PASSED] 40 VFs
[12:29:15] [PASSED] 41 VFs
[12:29:15] [PASSED] 42 VFs
[12:29:15] [PASSED] 43 VFs
[12:29:15] [PASSED] 44 VFs
[12:29:15] [PASSED] 45 VFs
[12:29:15] [PASSED] 46 VFs
[12:29:15] [PASSED] 47 VFs
[12:29:15] [PASSED] 48 VFs
[12:29:15] [PASSED] 49 VFs
[12:29:15] [PASSED] 50 VFs
[12:29:15] [PASSED] 51 VFs
[12:29:15] [PASSED] 52 VFs
[12:29:15] [PASSED] 53 VFs
[12:29:15] [PASSED] 54 VFs
[12:29:15] [PASSED] 55 VFs
[12:29:15] [PASSED] 56 VFs
[12:29:15] [PASSED] 57 VFs
[12:29:15] [PASSED] 58 VFs
[12:29:15] [PASSED] 59 VFs
[12:29:15] [PASSED] 60 VFs
[12:29:15] [PASSED] 61 VFs
[12:29:15] [PASSED] 62 VFs
[12:29:15] [PASSED] 63 VFs
[12:29:15] ================= [PASSED] fair_doorbells ==================
[12:29:15] ======================== fair_ggtt  ========================
[12:29:15] [PASSED] 1 VF
[12:29:15] [PASSED] 2 VFs
[12:29:15] [PASSED] 3 VFs
[12:29:15] [PASSED] 4 VFs
[12:29:15] [PASSED] 5 VFs
[12:29:15] [PASSED] 6 VFs
[12:29:15] [PASSED] 7 VFs
[12:29:15] [PASSED] 8 VFs
[12:29:15] [PASSED] 9 VFs
[12:29:15] [PASSED] 10 VFs
[12:29:15] [PASSED] 11 VFs
[12:29:15] [PASSED] 12 VFs
[12:29:15] [PASSED] 13 VFs
[12:29:15] [PASSED] 14 VFs
[12:29:15] [PASSED] 15 VFs
[12:29:15] [PASSED] 16 VFs
[12:29:15] [PASSED] 17 VFs
[12:29:15] [PASSED] 18 VFs
[12:29:15] [PASSED] 19 VFs
[12:29:15] [PASSED] 20 VFs
[12:29:15] [PASSED] 21 VFs
[12:29:15] [PASSED] 22 VFs
[12:29:15] [PASSED] 23 VFs
[12:29:15] [PASSED] 24 VFs
[12:29:15] [PASSED] 25 VFs
[12:29:15] [PASSED] 26 VFs
[12:29:15] [PASSED] 27 VFs
[12:29:15] [PASSED] 28 VFs
[12:29:15] [PASSED] 29 VFs
[12:29:15] [PASSED] 30 VFs
[12:29:15] [PASSED] 31 VFs
[12:29:15] [PASSED] 32 VFs
[12:29:15] [PASSED] 33 VFs
[12:29:15] [PASSED] 34 VFs
[12:29:15] [PASSED] 35 VFs
[12:29:15] [PASSED] 36 VFs
[12:29:15] [PASSED] 37 VFs
[12:29:15] [PASSED] 38 VFs
[12:29:15] [PASSED] 39 VFs
[12:29:15] [PASSED] 40 VFs
[12:29:15] [PASSED] 41 VFs
[12:29:15] [PASSED] 42 VFs
[12:29:15] [PASSED] 43 VFs
[12:29:15] [PASSED] 44 VFs
[12:29:15] [PASSED] 45 VFs
[12:29:15] [PASSED] 46 VFs
[12:29:15] [PASSED] 47 VFs
[12:29:15] [PASSED] 48 VFs
[12:29:15] [PASSED] 49 VFs
[12:29:15] [PASSED] 50 VFs
[12:29:15] [PASSED] 51 VFs
[12:29:15] [PASSED] 52 VFs
[12:29:15] [PASSED] 53 VFs
[12:29:15] [PASSED] 54 VFs
[12:29:15] [PASSED] 55 VFs
[12:29:15] [PASSED] 56 VFs
[12:29:15] [PASSED] 57 VFs
[12:29:15] [PASSED] 58 VFs
[12:29:15] [PASSED] 59 VFs
[12:29:15] [PASSED] 60 VFs
[12:29:15] [PASSED] 61 VFs
[12:29:15] [PASSED] 62 VFs
[12:29:15] [PASSED] 63 VFs
[12:29:15] ==================== [PASSED] fair_ggtt ====================
[12:29:15] ======================== fair_vram  ========================
[12:29:15] [PASSED] 1 VF
[12:29:15] [PASSED] 2 VFs
[12:29:15] [PASSED] 3 VFs
[12:29:15] [PASSED] 4 VFs
[12:29:15] [PASSED] 5 VFs
[12:29:15] [PASSED] 6 VFs
[12:29:15] [PASSED] 7 VFs
[12:29:15] [PASSED] 8 VFs
[12:29:15] [PASSED] 9 VFs
[12:29:15] [PASSED] 10 VFs
[12:29:15] [PASSED] 11 VFs
[12:29:15] [PASSED] 12 VFs
[12:29:15] [PASSED] 13 VFs
[12:29:15] [PASSED] 14 VFs
[12:29:15] [PASSED] 15 VFs
[12:29:15] [PASSED] 16 VFs
[12:29:15] [PASSED] 17 VFs
[12:29:15] [PASSED] 18 VFs
[12:29:15] [PASSED] 19 VFs
[12:29:15] [PASSED] 20 VFs
[12:29:15] [PASSED] 21 VFs
[12:29:15] [PASSED] 22 VFs
[12:29:15] [PASSED] 23 VFs
[12:29:15] [PASSED] 24 VFs
[12:29:15] [PASSED] 25 VFs
[12:29:15] [PASSED] 26 VFs
[12:29:15] [PASSED] 27 VFs
[12:29:15] [PASSED] 28 VFs
[12:29:15] [PASSED] 29 VFs
[12:29:15] [PASSED] 30 VFs
[12:29:15] [PASSED] 31 VFs
[12:29:15] [PASSED] 32 VFs
[12:29:15] [PASSED] 33 VFs
[12:29:15] [PASSED] 34 VFs
[12:29:15] [PASSED] 35 VFs
[12:29:15] [PASSED] 36 VFs
[12:29:15] [PASSED] 37 VFs
[12:29:15] [PASSED] 38 VFs
[12:29:15] [PASSED] 39 VFs
[12:29:15] [PASSED] 40 VFs
[12:29:15] [PASSED] 41 VFs
[12:29:15] [PASSED] 42 VFs
[12:29:15] [PASSED] 43 VFs
[12:29:15] [PASSED] 44 VFs
[12:29:15] [PASSED] 45 VFs
[12:29:15] [PASSED] 46 VFs
[12:29:15] [PASSED] 47 VFs
[12:29:15] [PASSED] 48 VFs
[12:29:15] [PASSED] 49 VFs
[12:29:15] [PASSED] 50 VFs
[12:29:15] [PASSED] 51 VFs
[12:29:15] [PASSED] 52 VFs
[12:29:15] [PASSED] 53 VFs
[12:29:15] [PASSED] 54 VFs
[12:29:15] [PASSED] 55 VFs
[12:29:15] [PASSED] 56 VFs
[12:29:15] [PASSED] 57 VFs
[12:29:15] [PASSED] 58 VFs
[12:29:15] [PASSED] 59 VFs
[12:29:15] [PASSED] 60 VFs
[12:29:15] [PASSED] 61 VFs
[12:29:15] [PASSED] 62 VFs
[12:29:15] [PASSED] 63 VFs
[12:29:15] ==================== [PASSED] fair_vram ====================
[12:29:15] ================== [PASSED] pf_gt_config ===================
[12:29:15] ===================== lmtt (1 subtest) =====================
[12:29:15] ======================== test_ops  =========================
[12:29:15] [PASSED] 2-level
[12:29:15] [PASSED] multi-level
[12:29:15] ==================== [PASSED] test_ops =====================
[12:29:15] ====================== [PASSED] lmtt =======================
[12:29:15] ================= sriov_packet (1 subtest) =================
[12:29:15] [PASSED] test_descriptor_init
[12:29:15] ================== [PASSED] sriov_packet ===================
[12:29:15] ================= pf_service (11 subtests) =================
[12:29:15] [PASSED] pf_negotiate_any
[12:29:15] [PASSED] pf_negotiate_base_match
[12:29:15] [PASSED] pf_negotiate_base_newer
[12:29:15] [PASSED] pf_negotiate_base_next
[12:29:15] [SKIPPED] pf_negotiate_base_older (no older minor)
[12:29:15] [PASSED] pf_negotiate_base_prev
[12:29:15] [PASSED] pf_negotiate_latest_match
[12:29:15] [PASSED] pf_negotiate_latest_newer
[12:29:15] [PASSED] pf_negotiate_latest_next
[12:29:15] [SKIPPED] pf_negotiate_latest_older (no older minor)
[12:29:15] [SKIPPED] pf_negotiate_latest_prev (no prev major)
[12:29:15] =================== [PASSED] pf_service ====================
[12:29:15] ================= xe_guc_g2g (2 subtests) ==================
[12:29:15] ============== xe_live_guc_g2g_kunit_default  ==============
[12:29:15] ========= [SKIPPED] xe_live_guc_g2g_kunit_default ==========
[12:29:15] ============== xe_live_guc_g2g_kunit_allmem  ===============
[12:29:15] ========== [SKIPPED] xe_live_guc_g2g_kunit_allmem ==========
[12:29:15] =================== [SKIPPED] xe_guc_g2g ===================
[12:29:15] =================== xe_mocs (2 subtests) ===================
[12:29:15] ================ xe_live_mocs_kernel_kunit  ================
[12:29:15] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[12:29:15] ================ xe_live_mocs_reset_kunit  =================
[12:29:15] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[12:29:15] ==================== [SKIPPED] xe_mocs =====================
[12:29:15] ================= xe_migrate (3 subtests) ==================
[12:29:15] ================= xe_migrate_sanity_kunit  =================
[12:29:15] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[12:29:15] ================== xe_validate_ccs_kunit  ==================
[12:29:15] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[12:29:15] ============= xe_migrate_access_memory_kunit  ==============
[12:29:15] ========= [SKIPPED] xe_migrate_access_memory_kunit =========
[12:29:15] =================== [SKIPPED] xe_migrate ===================
[12:29:15] ================== xe_dma_buf (1 subtest) ==================
[12:29:15] ==================== xe_dma_buf_kunit  =====================
[12:29:15] ================ [SKIPPED] xe_dma_buf_kunit ================
[12:29:15] =================== [SKIPPED] xe_dma_buf ===================
[12:29:15] ================= xe_bo_shrink (1 subtest) =================
[12:29:15] =================== xe_bo_shrink_kunit  ====================
[12:29:15] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[12:29:15] ================== [SKIPPED] xe_bo_shrink ==================
[12:29:15] ==================== xe_bo (2 subtests) ====================
[12:29:15] ================== xe_ccs_migrate_kunit  ===================
[12:29:15] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[12:29:15] ==================== xe_bo_evict_kunit  ====================
[12:29:15] =============== [SKIPPED] xe_bo_evict_kunit ================
[12:29:15] ===================== [SKIPPED] xe_bo ======================
[12:29:15] =================== xe_any (9 subtests) ====================
[12:29:15] [PASSED] test_to_xe
[12:29:15] [PASSED] test_to_dev
[12:29:15] [PASSED] test_to_pdev
[12:29:15] [PASSED] test_to_drm
[12:29:15] [PASSED] test_if_pdev
[12:29:15] [PASSED] test_if_xe
[12:29:15] [PASSED] test_if_tile
[12:29:15] [PASSED] test_if_gt
[12:29:15] [PASSED] test_to_id
[12:29:15] ===================== [PASSED] xe_any ======================
[12:29:15] ==================== args (13 subtests) ====================
[12:29:15] [PASSED] count_args_test
[12:29:15] [PASSED] call_args_example
[12:29:15] [PASSED] call_args_test
[12:29:15] [PASSED] drop_first_arg_example
[12:29:15] [PASSED] drop_first_arg_test
[12:29:15] [PASSED] first_arg_example
[12:29:15] [PASSED] first_arg_test
[12:29:15] [PASSED] last_arg_example
[12:29:15] [PASSED] last_arg_test
[12:29:15] [PASSED] pick_arg_example
[12:29:15] [PASSED] if_args_example
[12:29:15] [PASSED] if_args_test
[12:29:15] [PASSED] sep_comma_example
[12:29:15] ====================== [PASSED] args =======================
[12:29:15] =================== xe_pci (3 subtests) ====================
[12:29:15] ==================== check_graphics_ip  ====================
[12:29:15] [PASSED] 12.00 Xe_LP
[12:29:15] [PASSED] 12.10 Xe_LP+
[12:29:15] [PASSED] 12.55 Xe_HPG
[12:29:15] [PASSED] 12.60 Xe_HPC
[12:29:15] [PASSED] 12.70 Xe_LPG
[12:29:15] [PASSED] 12.71 Xe_LPG
[12:29:15] [PASSED] 12.74 Xe_LPG+
[12:29:15] [PASSED] 20.01 Xe2_HPG
[12:29:15] [PASSED] 20.02 Xe2_HPG
[12:29:15] [PASSED] 20.04 Xe2_LPG
[12:29:15] [PASSED] 30.00 Xe3_LPG
[12:29:15] [PASSED] 30.01 Xe3_LPG
[12:29:15] [PASSED] 30.03 Xe3_LPG
[12:29:15] [PASSED] 30.04 Xe3_LPG
[12:29:15] [PASSED] 30.05 Xe3_LPG
[12:29:15] [PASSED] 35.10 Xe3p_LPG
[12:29:15] [PASSED] 35.11 Xe3p_XPC
[12:29:15] ================ [PASSED] check_graphics_ip ================
[12:29:15] ===================== check_media_ip  ======================
[12:29:15] [PASSED] 12.00 Xe_M
[12:29:15] [PASSED] 12.55 Xe_HPM
[12:29:15] [PASSED] 13.00 Xe_LPM+
[12:29:15] [PASSED] 13.01 Xe2_HPM
[12:29:15] [PASSED] 20.00 Xe2_LPM
[12:29:15] [PASSED] 30.00 Xe3_LPM
[12:29:15] [PASSED] 30.02 Xe3_LPM
[12:29:15] [PASSED] 35.00 Xe3p_LPM
[12:29:15] [PASSED] 35.03 Xe3p_HPM
[12:29:15] ================= [PASSED] check_media_ip ==================
[12:29:15] =================== check_platform_desc  ===================
[12:29:15] [PASSED] 0x9A60 (TIGERLAKE)
[12:29:15] [PASSED] 0x9A68 (TIGERLAKE)
[12:29:15] [PASSED] 0x9A70 (TIGERLAKE)
[12:29:15] [PASSED] 0x9A40 (TIGERLAKE)
[12:29:15] [PASSED] 0x9A49 (TIGERLAKE)
[12:29:15] [PASSED] 0x9A59 (TIGERLAKE)
[12:29:15] [PASSED] 0x9A78 (TIGERLAKE)
[12:29:15] [PASSED] 0x9AC0 (TIGERLAKE)
[12:29:15] [PASSED] 0x9AC9 (TIGERLAKE)
[12:29:15] [PASSED] 0x9AD9 (TIGERLAKE)
[12:29:15] [PASSED] 0x9AF8 (TIGERLAKE)
[12:29:15] [PASSED] 0x4C80 (ROCKETLAKE)
[12:29:15] [PASSED] 0x4C8A (ROCKETLAKE)
[12:29:15] [PASSED] 0x4C8B (ROCKETLAKE)
[12:29:15] [PASSED] 0x4C8C (ROCKETLAKE)
[12:29:15] [PASSED] 0x4C90 (ROCKETLAKE)
[12:29:15] [PASSED] 0x4C9A (ROCKETLAKE)
[12:29:15] [PASSED] 0x4680 (ALDERLAKE_S)
[12:29:15] [PASSED] 0x4682 (ALDERLAKE_S)
[12:29:15] [PASSED] 0x4688 (ALDERLAKE_S)
[12:29:15] [PASSED] 0x468A (ALDERLAKE_S)
[12:29:15] [PASSED] 0x468B (ALDERLAKE_S)
[12:29:15] [PASSED] 0x4690 (ALDERLAKE_S)
[12:29:15] [PASSED] 0x4692 (ALDERLAKE_S)
[12:29:15] [PASSED] 0x4693 (ALDERLAKE_S)
[12:29:15] [PASSED] 0x46A0 (ALDERLAKE_P)
[12:29:15] [PASSED] 0x46A1 (ALDERLAKE_P)
[12:29:15] [PASSED] 0x46A2 (ALDERLAKE_P)
[12:29:15] [PASSED] 0x46A3 (ALDERLAKE_P)
[12:29:15] [PASSED] 0x46A6 (ALDERLAKE_P)
[12:29:15] [PASSED] 0x46A8 (ALDERLAKE_P)
[12:29:15] [PASSED] 0x46AA (ALDERLAKE_P)
[12:29:15] [PASSED] 0x462A (ALDERLAKE_P)
[12:29:15] [PASSED] 0x4626 (ALDERLAKE_P)
[12:29:15] [PASSED] 0x4628 (ALDERLAKE_P)
[12:29:15] [PASSED] 0x46B0 (ALDERLAKE_P)
[12:29:15] [PASSED] 0x46B1 (ALDERLAKE_P)
[12:29:15] [PASSED] 0x46B2 (ALDERLAKE_P)
[12:29:15] [PASSED] 0x46B3 (ALDERLAKE_P)
[12:29:15] [PASSED] 0x46C0 (ALDERLAKE_P)
[12:29:15] [PASSED] 0x46C1 (ALDERLAKE_P)
[12:29:15] [PASSED] 0x46C2 (ALDERLAKE_P)
[12:29:15] [PASSED] 0x46C3 (ALDERLAKE_P)
[12:29:15] [PASSED] 0x46D0 (ALDERLAKE_N)
[12:29:15] [PASSED] 0x46D1 (ALDERLAKE_N)
[12:29:15] [PASSED] 0x46D2 (ALDERLAKE_N)
[12:29:15] [PASSED] 0x46D3 (ALDERLAKE_N)
[12:29:15] [PASSED] 0x46D4 (ALDERLAKE_N)
[12:29:15] [PASSED] 0xA721 (ALDERLAKE_P)
[12:29:15] [PASSED] 0xA7A1 (ALDERLAKE_P)
[12:29:15] [PASSED] 0xA7A9 (ALDERLAKE_P)
[12:29:15] [PASSED] 0xA7AC (ALDERLAKE_P)
[12:29:15] [PASSED] 0xA7AD (ALDERLAKE_P)
[12:29:15] [PASSED] 0xA720 (ALDERLAKE_P)
[12:29:15] [PASSED] 0xA7A0 (ALDERLAKE_P)
[12:29:15] [PASSED] 0xA7A8 (ALDERLAKE_P)
[12:29:15] [PASSED] 0xA7AA (ALDERLAKE_P)
[12:29:15] [PASSED] 0xA7AB (ALDERLAKE_P)
[12:29:15] [PASSED] 0xA780 (ALDERLAKE_S)
[12:29:15] [PASSED] 0xA781 (ALDERLAKE_S)
[12:29:15] [PASSED] 0xA782 (ALDERLAKE_S)
[12:29:15] [PASSED] 0xA783 (ALDERLAKE_S)
[12:29:15] [PASSED] 0xA788 (ALDERLAKE_S)
[12:29:15] [PASSED] 0xA789 (ALDERLAKE_S)
[12:29:15] [PASSED] 0xA78A (ALDERLAKE_S)
[12:29:15] [PASSED] 0xA78B (ALDERLAKE_S)
[12:29:15] [PASSED] 0x4905 (DG1)
[12:29:15] [PASSED] 0x4906 (DG1)
[12:29:15] [PASSED] 0x4907 (DG1)
[12:29:15] [PASSED] 0x4908 (DG1)
[12:29:15] [PASSED] 0x4909 (DG1)
[12:29:15] [PASSED] 0x56C0 (DG2)
[12:29:15] [PASSED] 0x56C2 (DG2)
[12:29:15] [PASSED] 0x56C1 (DG2)
[12:29:15] [PASSED] 0x7D51 (METEORLAKE)
[12:29:15] [PASSED] 0x7DD1 (METEORLAKE)
[12:29:15] [PASSED] 0x7D41 (METEORLAKE)
[12:29:15] [PASSED] 0x7D67 (METEORLAKE)
[12:29:15] [PASSED] 0xB640 (METEORLAKE)
[12:29:15] [PASSED] 0x56A0 (DG2)
[12:29:15] [PASSED] 0x56A1 (DG2)
[12:29:15] [PASSED] 0x56A2 (DG2)
[12:29:15] [PASSED] 0x56BE (DG2)
[12:29:15] [PASSED] 0x56BF (DG2)
[12:29:15] [PASSED] 0x5690 (DG2)
[12:29:15] [PASSED] 0x5691 (DG2)
[12:29:15] [PASSED] 0x5692 (DG2)
[12:29:15] [PASSED] 0x56A5 (DG2)
[12:29:15] [PASSED] 0x56A6 (DG2)
[12:29:15] [PASSED] 0x56B0 (DG2)
[12:29:15] [PASSED] 0x56B1 (DG2)
[12:29:15] [PASSED] 0x56BA (DG2)
[12:29:15] [PASSED] 0x56BB (DG2)
[12:29:15] [PASSED] 0x56BC (DG2)
[12:29:15] [PASSED] 0x56BD (DG2)
[12:29:15] [PASSED] 0x5693 (DG2)
[12:29:15] [PASSED] 0x5694 (DG2)
[12:29:15] [PASSED] 0x5695 (DG2)
[12:29:15] [PASSED] 0x56A3 (DG2)
[12:29:15] [PASSED] 0x56A4 (DG2)
[12:29:15] [PASSED] 0x56B2 (DG2)
[12:29:15] [PASSED] 0x56B3 (DG2)
[12:29:15] [PASSED] 0x5696 (DG2)
[12:29:15] [PASSED] 0x5697 (DG2)
[12:29:15] [PASSED] 0xB69 (PVC)
[12:29:15] [PASSED] 0xB6E (PVC)
[12:29:15] [PASSED] 0xBD4 (PVC)
[12:29:15] [PASSED] 0xBD5 (PVC)
[12:29:15] [PASSED] 0xBD6 (PVC)
[12:29:15] [PASSED] 0xBD7 (PVC)
[12:29:15] [PASSED] 0xBD8 (PVC)
[12:29:15] [PASSED] 0xBD9 (PVC)
[12:29:15] [PASSED] 0xBDA (PVC)
[12:29:15] [PASSED] 0xBDB (PVC)
[12:29:15] [PASSED] 0xBE0 (PVC)
[12:29:15] [PASSED] 0xBE1 (PVC)
[12:29:15] [PASSED] 0xBE5 (PVC)
[12:29:15] [PASSED] 0x7D40 (METEORLAKE)
[12:29:15] [PASSED] 0x7D45 (METEORLAKE)
[12:29:15] [PASSED] 0x7D55 (METEORLAKE)
[12:29:15] [PASSED] 0x7D60 (METEORLAKE)
[12:29:15] [PASSED] 0x7DD5 (METEORLAKE)
[12:29:15] [PASSED] 0x6420 (LUNARLAKE)
[12:29:15] [PASSED] 0x64A0 (LUNARLAKE)
[12:29:15] [PASSED] 0x64B0 (LUNARLAKE)
[12:29:15] [PASSED] 0xE202 (BATTLEMAGE)
[12:29:15] [PASSED] 0xE209 (BATTLEMAGE)
[12:29:15] [PASSED] 0xE20B (BATTLEMAGE)
[12:29:15] [PASSED] 0xE20C (BATTLEMAGE)
[12:29:15] [PASSED] 0xE20D (BATTLEMAGE)
[12:29:15] [PASSED] 0xE210 (BATTLEMAGE)
[12:29:15] [PASSED] 0xE211 (BATTLEMAGE)
[12:29:15] [PASSED] 0xE212 (BATTLEMAGE)
[12:29:15] [PASSED] 0xE216 (BATTLEMAGE)
[12:29:15] [PASSED] 0xE220 (BATTLEMAGE)
[12:29:15] [PASSED] 0xE221 (BATTLEMAGE)
[12:29:15] [PASSED] 0xE222 (BATTLEMAGE)
[12:29:15] [PASSED] 0xE223 (BATTLEMAGE)
[12:29:15] [PASSED] 0xB080 (PANTHERLAKE)
[12:29:15] [PASSED] 0xB081 (PANTHERLAKE)
[12:29:15] [PASSED] 0xB082 (PANTHERLAKE)
[12:29:15] [PASSED] 0xB083 (PANTHERLAKE)
[12:29:15] [PASSED] 0xB084 (PANTHERLAKE)
[12:29:15] [PASSED] 0xB085 (PANTHERLAKE)
[12:29:15] [PASSED] 0xB086 (PANTHERLAKE)
[12:29:15] [PASSED] 0xB087 (PANTHERLAKE)
[12:29:15] [PASSED] 0xB08F (PANTHERLAKE)
[12:29:15] [PASSED] 0xB090 (PANTHERLAKE)
[12:29:15] [PASSED] 0xB0A0 (PANTHERLAKE)
[12:29:15] [PASSED] 0xB0A1 (PANTHERLAKE)
[12:29:15] [PASSED] 0xB0B0 (PANTHERLAKE)
[12:29:15] [PASSED] 0xFD80 (PANTHERLAKE)
[12:29:15] [PASSED] 0xFD81 (PANTHERLAKE)
[12:29:15] [PASSED] 0xD740 (NOVALAKE_S)
[12:29:15] [PASSED] 0xD741 (NOVALAKE_S)
[12:29:15] [PASSED] 0xD742 (NOVALAKE_S)
[12:29:15] [PASSED] 0xD743 (NOVALAKE_S)
[12:29:15] [PASSED] 0xD745 (NOVALAKE_S)
[12:29:15] [PASSED] 0xD74A (NOVALAKE_S)
[12:29:15] [PASSED] 0xD74B (NOVALAKE_S)
[12:29:15] [PASSED] 0x674C (CRESCENTISLAND)
[12:29:15] [PASSED] 0x674D (CRESCENTISLAND)
[12:29:15] [PASSED] 0x674E (CRESCENTISLAND)
[12:29:15] [PASSED] 0x674F (CRESCENTISLAND)
[12:29:15] [PASSED] 0x6750 (CRESCENTISLAND)
[12:29:15] [PASSED] 0x6751 (CRESCENTISLAND)
[12:29:15] [PASSED] 0x6752 (CRESCENTISLAND)
[12:29:15] [PASSED] 0xD750 (NOVALAKE_P)
[12:29:15] [PASSED] 0xD751 (NOVALAKE_P)
[12:29:15] [PASSED] 0xD752 (NOVALAKE_P)
[12:29:15] [PASSED] 0xD753 (NOVALAKE_P)
[12:29:15] [PASSED] 0xD754 (NOVALAKE_P)
[12:29:15] [PASSED] 0xD755 (NOVALAKE_P)
[12:29:15] [PASSED] 0xD756 (NOVALAKE_P)
[12:29:15] [PASSED] 0xD757 (NOVALAKE_P)
[12:29:15] [PASSED] 0xD75F (NOVALAKE_P)
[12:29:15] =============== [PASSED] check_platform_desc ===============
[12:29:15] ===================== [PASSED] xe_pci ======================
[12:29:15] ============= xe_rtp_tables_test (5 subtests) ==============
[12:29:15] ================== xe_rtp_table_gt_test  ===================
[12:29:15] [PASSED] gt_was/14011060649
[12:29:15] [PASSED] gt_was/14011059788
[12:29:15] [PASSED] gt_was/14015795083
[12:29:15] [PASSED] gt_was/16021867713
[12:29:15] [PASSED] gt_was/14019449301
[12:29:15] [PASSED] gt_was/16028005424
[12:29:15] [PASSED] gt_was/14026578760
[12:29:15] [PASSED] gt_was/1409420604
[12:29:15] [PASSED] gt_was/1408615072
[12:29:15] [PASSED] gt_was/22010523718
[12:29:15] [PASSED] gt_was/14011006942
[12:29:15] [PASSED] gt_was/14014830051
[12:29:15] [PASSED] gt_was/18018781329
[12:29:15] [PASSED] gt_was/1509235366
[12:29:15] [PASSED] gt_was/18018781329
[12:29:15] [PASSED] gt_was/16016694945
[12:29:15] [PASSED] gt_was/14018575942
[12:29:15] [PASSED] gt_was/22016670082
[12:29:15] [PASSED] gt_was/22016670082
[12:29:15] [PASSED] gt_was/14017421178
[12:29:15] [PASSED] gt_was/16025250150
[12:29:15] [PASSED] gt_was/14021871409
[12:29:15] [PASSED] gt_was/16021865536
[12:29:15] [PASSED] gt_was/14021486841
[12:29:15] [PASSED] gt_was/14025160223
[12:29:15] [PASSED] gt_was/14026144927, 16029437861, 14026127056
[12:29:15] [PASSED] gt_was/14025635424
[12:29:15] [PASSED] gt_was/16028005424
[12:29:15] ============== [PASSED] xe_rtp_table_gt_test ===============
[12:29:15] ================== xe_rtp_table_gt_test  ===================
[12:29:15] [PASSED] gt_tunings/Tuning: Blend Fill Caching Optimization Disable
[12:29:15] [PASSED] gt_tunings/Tuning: 32B Access Enable
[12:29:15] [PASSED] gt_tunings/Tuning: L3 cache
[12:29:15] [PASSED] gt_tunings/Tuning: L3 cache - media
[12:29:15] [PASSED] gt_tunings/Tuning: Compression Overfetch
[12:29:15] [PASSED] gt_tunings/Tuning: Compression Overfetch - media
[12:29:15] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3
[12:29:15] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3 - media
[12:29:15] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only
[12:29:15] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only - media
[12:29:15] [PASSED] gt_tunings/Tuning: Stateless compression control
[12:29:15] [PASSED] gt_tunings/Tuning: Stateless compression control - media
[12:29:15] [PASSED] gt_tunings/Tuning: L3 RW flush all Cache
[12:29:15] [PASSED] gt_tunings/Tuning: L3 RW flush all cache - media
[12:29:15] [PASSED] gt_tunings/Tuning: Set STLB Bank Hash Mode to 4KB
[12:29:15] [PASSED] gt_tunings/Tuning: Force All Non-Compressible Memory Reads to be 256B Overfetches
[12:29:15] ============== [PASSED] xe_rtp_table_gt_test ===============
[12:29:15] ================== xe_rtp_table_oob_test  ==================
[12:29:15] [PASSED] oob_was/1607983814
[12:29:15] [PASSED] oob_was/16010904313
[12:29:15] [PASSED] oob_was/18022495364
[12:29:15] [PASSED] oob_was/22012773006
[12:29:15] [PASSED] oob_was/14014475959
[12:29:15] [PASSED] oob_was/22011391025
[12:29:15] [PASSED] oob_was/22012727170
[12:29:15] [PASSED] oob_was/22012727685
[12:29:15] [PASSED] oob_was/22016596838
[12:29:15] [PASSED] oob_was/18020744125
[12:29:15] [PASSED] oob_was/1409600907
[12:29:15] [PASSED] oob_was/22014953428
[12:29:15] [PASSED] oob_was/16017236439
[12:29:15] [PASSED] oob_was/14019821291
[12:29:15] [PASSED] oob_was/14015076503
[12:29:15] [PASSED] oob_was/22016122933
[12:29:15] [PASSED] oob_was/14018913170
[12:29:15] [PASSED] oob_was/14018094691
[12:29:15] [PASSED] oob_was/18024947630
[12:29:15] [PASSED] oob_was/16022287689
[12:29:15] [PASSED] oob_was/13011645652
[12:29:15] [PASSED] oob_was/14022293748
[12:29:15] [PASSED] oob_was/22019794406
[12:29:15] [PASSED] oob_was/22019338487
[12:29:15] [PASSED] oob_was/16023588340
[12:29:15] [PASSED] oob_was/14019789679
[12:29:15] [PASSED] oob_was/14022866841
[12:29:15] [PASSED] oob_was/16021333562
[12:29:15] [PASSED] oob_was/14016712196
[12:29:15] [PASSED] oob_was/14015568240
[12:29:15] [PASSED] oob_was/18013179988
[12:29:15] [PASSED] oob_was/1508761755
[12:29:15] [PASSED] oob_was/16023105232
[12:29:15] [PASSED] oob_was/16026508708
[12:29:15] [PASSED] oob_was/14020001231
[12:29:15] [PASSED] oob_was/16023683509
[12:29:15] [PASSED] oob_was/14025515070
[12:29:15] [PASSED] oob_was/15015404425_disable
[12:29:15] [PASSED] oob_was/16026007364
[12:29:15] [PASSED] oob_was/14020316580
[12:29:15] [PASSED] oob_was/14025883347
[12:29:15] [PASSED] oob_was/16029380221
[12:29:15] [PASSED] oob_was/22022079272
[12:29:15] [PASSED] oob_was/16029897822
[12:29:15] [PASSED] oob_was/14026539277
[12:29:15] [PASSED] oob_was/14027054324
[12:29:15] [PASSED] oob_was/14025941587
[12:29:15] [PASSED] oob_was/16030224309
[12:29:15] [PASSED] oob_was/14028709524
[12:29:15] [PASSED] oob_was/14028250015
[12:29:15] [PASSED] oob_was/16031259911
[12:29:15] ============== [PASSED] xe_rtp_table_oob_test ==============
[12:29:15] ================ xe_rtp_table_dev_oob_test  ================
[12:29:15] [PASSED] device_oob_was/22010954014
[12:29:15] [PASSED] device_oob_was/15015404425
[12:29:15] [PASSED] device_oob_was/22019338487_display
[12:29:15] [PASSED] device_oob_was/14022085890
[12:29:15] [PASSED] device_oob_was/14026633728
[12:29:15] [PASSED] device_oob_was/14026746987
[12:29:15] [PASSED] device_oob_was/14026779378
[12:29:15] [PASSED] device_oob_was/14028586678
[12:29:15] ============ [PASSED] xe_rtp_table_dev_oob_test ============
[12:29:15] ========== xe_rtp_table_missing_upper_bound_test  ==========
[12:29:15] [PASSED] register_whitelist/WaAllowPMDepthAndInvocationCountAccessFromUMD, 1408556865
[12:29:15] [PASSED] register_whitelist/1508744258, 14012131227, 1808121037
[12:29:15] [PASSED] register_whitelist/1806527549
[12:29:15] [PASSED] register_whitelist/allow_read_ctx_timestamp
[12:29:15] [PASSED] register_whitelist/allow_read_queue_timestamp
[12:29:15] [PASSED] register_whitelist/16014440446
[12:29:15] [PASSED] register_whitelist/16017236439
[12:29:15] [PASSED] register_whitelist/16020183090
[12:29:15] [PASSED] register_whitelist/14024997852
[12:29:15] [PASSED] register_whitelist/14024997852
[12:29:15] ====== [PASSED] xe_rtp_table_missing_upper_bound_test ======
[12:29:15] =============== [PASSED] xe_rtp_tables_test ================
[12:29:15] =================== xe_rtp (3 subtests) ====================
[12:29:15] =================== xe_rtp_rules_tests  ====================
[12:29:15] [PASSED] no
[12:29:15] [PASSED] yes
[12:29:15] [PASSED] no-and-no
[12:29:15] [PASSED] no-and-yes
[12:29:15] [PASSED] yes-and-no
[12:29:15] [PASSED] yes-and-yes
[12:29:15] [PASSED] no-or-no
[12:29:15] [PASSED] no-or-yes
[12:29:15] [PASSED] yes-or-no
[12:29:15] [PASSED] yes-or-yes
[12:29:15] [PASSED] no-yes-or-yes-no
[12:29:15] [PASSED] no-yes-or-yes-yes
[12:29:15] [PASSED] yes-yes-or-no-yes
[12:29:15] [PASSED] yes-yes-or-yes-yes
[12:29:15] [PASSED] no-no-or-yes-or-no
[12:29:15] [PASSED] or
[12:29:15] [PASSED] or-yes
[12:29:15] [PASSED] or-no
[12:29:15] [PASSED] yes-or
[12:29:15] [PASSED] no-or
[12:29:15] [PASSED] no-or-or-yes
[12:29:15] [PASSED] yes-or-or-no
[12:29:15] [PASSED] no-or-or-no
[12:29:15] [PASSED] missing-context-engine-class
[12:29:15] [PASSED] missing-context-engine-class-or-yes
[12:29:15] [PASSED] missing-context-engine-class-or-or-yes
[12:29:15] =============== [PASSED] xe_rtp_rules_tests ================
[12:29:15] =============== xe_rtp_process_to_sr_tests  ================
[12:29:15] [PASSED] coalesce-same-reg
[12:29:15] [PASSED] coalesce-same-reg-literal-and-func
[12:29:15] [PASSED] no-match-no-add
[12:29:15] [PASSED] two-regs-two-entries
[12:29:15] [PASSED] clr-one-set-other
[12:29:15] [PASSED] set-field
[12:29:15] [PASSED] conflict-duplicate
[12:29:15] [PASSED] conflict-not-disjoint
[12:29:15] [PASSED] conflict-not-disjoint-literal-and-func
[12:29:15] [PASSED] conflict-reg-type
[12:29:15] [PASSED] bad-mcr-reg-forced-to-regular
[12:29:15] [PASSED] bad-regular-reg-forced-to-mcr
[12:29:15] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[12:29:15] ================== xe_rtp_process_tests  ===================
[12:29:15] [PASSED] active1
[12:29:15] [PASSED] active2
[12:29:15] [PASSED] active-inactive
[12:29:15] [PASSED] inactive-active
[12:29:15] [PASSED] inactive-active-inactive
[12:29:15] [PASSED] inactive-inactive-inactive
[12:29:15] ============== [PASSED] xe_rtp_process_tests ===============
[12:29:15] ===================== [PASSED] xe_rtp ======================
[12:29:15] ==================== xe_wa (1 subtest) =====================
[12:29:15] ======================== xe_wa_gt  =========================
[12:29:15] [PASSED] TIGERLAKE B0
[12:29:15] [PASSED] DG1 A0
[12:29:15] [PASSED] DG1 B0
[12:29:15] [PASSED] ALDERLAKE_S A0
[12:29:15] [PASSED] ALDERLAKE_S B0
[12:29:15] [PASSED] ALDERLAKE_S C0
[12:29:15] [PASSED] ALDERLAKE_S D0
[12:29:15] [PASSED] ALDERLAKE_P A0
[12:29:15] [PASSED] ALDERLAKE_P B0
[12:29:15] [PASSED] ALDERLAKE_P C0
[12:29:15] [PASSED] ALDERLAKE_S RPLS D0
[12:29:15] [PASSED] ALDERLAKE_P RPLU E0
[12:29:15] [PASSED] DG2 G10 C0
[12:29:15] [PASSED] DG2 G11 B1
[12:29:15] [PASSED] DG2 G12 A1
[12:29:15] [PASSED] METEORLAKE 12.70(Xe_LPG) A0 13.00(Xe_LPM+) A0
[12:29:15] [PASSED] METEORLAKE 12.71(Xe_LPG) A0 13.00(Xe_LPM+) A0
[12:29:15] [PASSED] METEORLAKE 12.74(Xe_LPG+) A0 13.00(Xe_LPM+) A0
[12:29:15] [PASSED] LUNARLAKE 20.04(Xe2_LPG) A0 20.00(Xe2_LPM) A0
[12:29:15] [PASSED] LUNARLAKE 20.04(Xe2_LPG) B0 20.00(Xe2_LPM) A0
[12:29:15] [PASSED] BATTLEMAGE 20.01(Xe2_HPG) A0 13.01(Xe2_HPM) A1
[12:29:15] [PASSED] PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0
[12:29:15] ==================== [PASSED] xe_wa_gt =====================
[12:29:15] ====================== [PASSED] xe_wa ======================
[12:29:15] ============================================================
[12:29:15] Testing complete. Ran 843 tests: passed: 814, skipped: 29
[12:29:15] Elapsed time: 41.582s total, 2.490s configuring, 38.325s building, 0.713s running

+ for kcfg in "${kunitconfigs[@]}"
+ [[ ! -f /kernel/drivers/gpu/drm/tests/.kunitconfig ]]
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[12:29:15] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[12:29:18] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[12:29:43] Starting KUnit Kernel (1/1)...
[12:29:43] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[12:29:43] ============ drm_test_pick_cmdline (2 subtests) ============
[12:29:43] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[12:29:43] =============== drm_test_pick_cmdline_named  ===============
[12:29:43] [PASSED] NTSC
[12:29:43] [PASSED] NTSC-J
[12:29:43] [PASSED] PAL
[12:29:43] [PASSED] PAL-M
[12:29:43] =========== [PASSED] drm_test_pick_cmdline_named ===========
[12:29:43] ============== [PASSED] drm_test_pick_cmdline ==============
[12:29:43] == drm_test_atomic_get_connector_for_encoder (1 subtest) ===
[12:29:43] [PASSED] drm_test_drm_atomic_get_connector_for_encoder
[12:29:43] ==== [PASSED] drm_test_atomic_get_connector_for_encoder ====
[12:29:43] =========== drm_validate_clone_mode (2 subtests) ===========
[12:29:43] ============== drm_test_check_in_clone_mode  ===============
[12:29:43] [PASSED] in_clone_mode
[12:29:43] [PASSED] not_in_clone_mode
[12:29:43] ========== [PASSED] drm_test_check_in_clone_mode ===========
[12:29:43] =============== drm_test_check_valid_clones  ===============
[12:29:43] [PASSED] not_in_clone_mode
[12:29:43] [PASSED] valid_clone
[12:29:43] [PASSED] invalid_clone
[12:29:43] =========== [PASSED] drm_test_check_valid_clones ===========
[12:29:43] ============= [PASSED] drm_validate_clone_mode =============
[12:29:43] ============= drm_validate_modeset (1 subtest) =============
[12:29:43] [PASSED] drm_test_check_connector_changed_modeset
[12:29:43] ============== [PASSED] drm_validate_modeset ===============
[12:29:43] ====== drm_test_bridge_get_current_state (1 subtest) =======
[12:29:43] [PASSED] drm_test_drm_bridge_get_current_state_atomic
[12:29:43] ======== [PASSED] drm_test_bridge_get_current_state ========
[12:29:43] ====== drm_test_bridge_helper_reset_crtc (3 subtests) ======
[12:29:43] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic
[12:29:43] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic_disabled
[12:29:43] [PASSED] drm_test_drm_bridge_helper_hdmi_output_bus_fmts
[12:29:43] ======== [PASSED] drm_test_bridge_helper_reset_crtc ========
[12:29:43] ============== drm_bridge_alloc (2 subtests) ===============
[12:29:43] [PASSED] drm_test_drm_bridge_alloc_basic
[12:29:43] [PASSED] drm_test_drm_bridge_alloc_get_put
[12:29:43] ================ [PASSED] drm_bridge_alloc =================
[12:29:43] ============= drm_bridge_bus_fmt (5 subtests) ==============
[12:29:43] [PASSED] drm_test_bridge_rgb_yuv_rgb
[12:29:43] [PASSED] drm_test_bridge_must_convert_to_yuv444
[12:29:43] [PASSED] drm_test_bridge_hdmi_auto_rgb
[12:29:43] [PASSED] drm_test_bridge_auto_first
[12:29:43] [PASSED] drm_test_bridge_rgb_yuv_no_path
[12:29:43] =============== [PASSED] drm_bridge_bus_fmt ================
[12:29:43] ============= drm_cmdline_parser (40 subtests) =============
[12:29:43] [PASSED] drm_test_cmdline_force_d_only
[12:29:43] [PASSED] drm_test_cmdline_force_D_only_dvi
[12:29:43] [PASSED] drm_test_cmdline_force_D_only_hdmi
[12:29:43] [PASSED] drm_test_cmdline_force_D_only_not_digital
[12:29:43] [PASSED] drm_test_cmdline_force_e_only
[12:29:43] [PASSED] drm_test_cmdline_res
[12:29:43] [PASSED] drm_test_cmdline_res_vesa
[12:29:43] [PASSED] drm_test_cmdline_res_vesa_rblank
[12:29:43] [PASSED] drm_test_cmdline_res_rblank
[12:29:43] [PASSED] drm_test_cmdline_res_bpp
[12:29:43] [PASSED] drm_test_cmdline_res_refresh
[12:29:43] [PASSED] drm_test_cmdline_res_bpp_refresh
[12:29:43] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[12:29:43] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[12:29:43] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[12:29:43] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[12:29:43] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[12:29:43] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[12:29:43] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[12:29:43] [PASSED] drm_test_cmdline_res_margins_force_on
[12:29:43] [PASSED] drm_test_cmdline_res_vesa_margins
[12:29:43] [PASSED] drm_test_cmdline_name
[12:29:43] [PASSED] drm_test_cmdline_name_bpp
[12:29:43] [PASSED] drm_test_cmdline_name_option
[12:29:43] [PASSED] drm_test_cmdline_name_bpp_option
[12:29:43] [PASSED] drm_test_cmdline_rotate_0
[12:29:43] [PASSED] drm_test_cmdline_rotate_90
[12:29:43] [PASSED] drm_test_cmdline_rotate_180
[12:29:43] [PASSED] drm_test_cmdline_rotate_270
[12:29:43] [PASSED] drm_test_cmdline_hmirror
[12:29:43] [PASSED] drm_test_cmdline_vmirror
[12:29:43] [PASSED] drm_test_cmdline_margin_options
[12:29:43] [PASSED] drm_test_cmdline_multiple_options
[12:29:43] [PASSED] drm_test_cmdline_bpp_extra_and_option
[12:29:43] [PASSED] drm_test_cmdline_extra_and_option
[12:29:43] [PASSED] drm_test_cmdline_freestanding_options
[12:29:43] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[12:29:43] [PASSED] drm_test_cmdline_panel_orientation
[12:29:43] ================ drm_test_cmdline_invalid  =================
[12:29:43] [PASSED] margin_only
[12:29:43] [PASSED] interlace_only
[12:29:43] [PASSED] res_missing_x
[12:29:43] [PASSED] res_missing_y
[12:29:43] [PASSED] res_bad_y
[12:29:43] [PASSED] res_missing_y_bpp
[12:29:43] [PASSED] res_bad_bpp
[12:29:43] [PASSED] res_bad_refresh
[12:29:43] [PASSED] res_bpp_refresh_force_on_off
[12:29:43] [PASSED] res_invalid_mode
[12:29:43] [PASSED] res_bpp_wrong_place_mode
[12:29:43] [PASSED] name_bpp_refresh
[12:29:43] [PASSED] name_refresh
[12:29:43] [PASSED] name_refresh_wrong_mode
[12:29:43] [PASSED] name_refresh_invalid_mode
[12:29:43] [PASSED] rotate_multiple
[12:29:43] [PASSED] rotate_invalid_val
[12:29:43] [PASSED] rotate_truncated
[12:29:43] [PASSED] invalid_option
[12:29:43] [PASSED] invalid_tv_option
[12:29:43] [PASSED] truncated_tv_option
[12:29:43] ============ [PASSED] drm_test_cmdline_invalid =============
[12:29:43] =============== drm_test_cmdline_tv_options  ===============
[12:29:43] [PASSED] NTSC
[12:29:43] [PASSED] NTSC_443
[12:29:43] [PASSED] NTSC_J
[12:29:43] [PASSED] PAL
[12:29:43] [PASSED] PAL_M
[12:29:43] [PASSED] PAL_N
[12:29:43] [PASSED] SECAM
[12:29:43] [PASSED] MONO_525
[12:29:43] [PASSED] MONO_625
[12:29:43] =========== [PASSED] drm_test_cmdline_tv_options ===========
[12:29:43] =============== [PASSED] drm_cmdline_parser ================
[12:29:43] ========== drmm_connector_hdmi_init (20 subtests) ==========
[12:29:43] [PASSED] drm_test_connector_hdmi_init_valid
[12:29:43] [PASSED] drm_test_connector_hdmi_init_bpc_8
[12:29:43] [PASSED] drm_test_connector_hdmi_init_bpc_10
[12:29:43] [PASSED] drm_test_connector_hdmi_init_bpc_12
[12:29:43] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[12:29:43] [PASSED] drm_test_connector_hdmi_init_bpc_null
[12:29:43] [PASSED] drm_test_connector_hdmi_init_formats_empty
[12:29:43] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[12:29:43] === drm_test_connector_hdmi_init_formats_yuv420_allowed  ===
[12:29:43] [PASSED] supported_formats=0x9 yuv420_allowed=1
[12:29:43] [PASSED] supported_formats=0x9 yuv420_allowed=0
[12:29:43] [PASSED] supported_formats=0x5 yuv420_allowed=1
[12:29:43] [PASSED] supported_formats=0x5 yuv420_allowed=0
[12:29:43] === [PASSED] drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[12:29:43] [PASSED] drm_test_connector_hdmi_init_null_ddc
[12:29:43] [PASSED] drm_test_connector_hdmi_init_null_product
[12:29:43] [PASSED] drm_test_connector_hdmi_init_null_vendor
[12:29:43] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[12:29:43] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[12:29:43] [PASSED] drm_test_connector_hdmi_init_product_valid
[12:29:43] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[12:29:43] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[12:29:43] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[12:29:43] ========= drm_test_connector_hdmi_init_type_valid  =========
[12:29:43] [PASSED] HDMI-A
[12:29:43] [PASSED] HDMI-B
[12:29:43] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[12:29:43] ======== drm_test_connector_hdmi_init_type_invalid  ========
[12:29:43] [PASSED] Unknown
[12:29:43] [PASSED] VGA
[12:29:43] [PASSED] DVI-I
[12:29:43] [PASSED] DVI-D
[12:29:43] [PASSED] DVI-A
[12:29:43] [PASSED] Composite
[12:29:43] [PASSED] SVIDEO
[12:29:43] [PASSED] LVDS
[12:29:43] [PASSED] Component
[12:29:43] [PASSED] DIN
[12:29:43] [PASSED] DP
[12:29:43] [PASSED] TV
[12:29:43] [PASSED] eDP
[12:29:43] [PASSED] Virtual
[12:29:43] [PASSED] DSI
[12:29:43] [PASSED] DPI
[12:29:43] [PASSED] Writeback
[12:29:43] [PASSED] SPI
[12:29:43] [PASSED] USB
[12:29:43] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[12:29:43] ============ [PASSED] drmm_connector_hdmi_init =============
[12:29:43] ============= drmm_connector_init (3 subtests) =============
[12:29:43] [PASSED] drm_test_drmm_connector_init
[12:29:43] [PASSED] drm_test_drmm_connector_init_null_ddc
[12:29:43] ========= drm_test_drmm_connector_init_type_valid  =========
[12:29:43] [PASSED] Unknown
[12:29:43] [PASSED] VGA
[12:29:43] [PASSED] DVI-I
[12:29:43] [PASSED] DVI-D
[12:29:43] [PASSED] DVI-A
[12:29:43] [PASSED] Composite
[12:29:43] [PASSED] SVIDEO
[12:29:43] [PASSED] LVDS
[12:29:43] [PASSED] Component
[12:29:43] [PASSED] DIN
[12:29:43] [PASSED] DP
[12:29:43] [PASSED] HDMI-A
[12:29:43] [PASSED] HDMI-B
[12:29:43] [PASSED] TV
[12:29:43] [PASSED] eDP
[12:29:43] [PASSED] Virtual
[12:29:43] [PASSED] DSI
[12:29:43] [PASSED] DPI
[12:29:43] [PASSED] Writeback
[12:29:43] [PASSED] SPI
[12:29:43] [PASSED] USB
[12:29:43] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[12:29:43] =============== [PASSED] drmm_connector_init ===============
[12:29:43] ========= drm_connector_dynamic_init (6 subtests) ==========
[12:29:43] [PASSED] drm_test_drm_connector_dynamic_init
[12:29:43] [PASSED] drm_test_drm_connector_dynamic_init_null_ddc
[12:29:43] [PASSED] drm_test_drm_connector_dynamic_init_not_added
[12:29:43] [PASSED] drm_test_drm_connector_dynamic_init_properties
[12:29:43] ===== drm_test_drm_connector_dynamic_init_type_valid  ======
[12:29:43] [PASSED] Unknown
[12:29:43] [PASSED] VGA
[12:29:43] [PASSED] DVI-I
[12:29:43] [PASSED] DVI-D
[12:29:43] [PASSED] DVI-A
[12:29:43] [PASSED] Composite
[12:29:43] [PASSED] SVIDEO
[12:29:43] [PASSED] LVDS
[12:29:43] [PASSED] Component
[12:29:43] [PASSED] DIN
[12:29:43] [PASSED] DP
[12:29:43] [PASSED] HDMI-A
[12:29:43] [PASSED] HDMI-B
[12:29:43] [PASSED] TV
[12:29:43] [PASSED] eDP
[12:29:43] [PASSED] Virtual
[12:29:43] [PASSED] DSI
[12:29:43] [PASSED] DPI
[12:29:43] [PASSED] Writeback
[12:29:43] [PASSED] SPI
[12:29:43] [PASSED] USB
[12:29:43] = [PASSED] drm_test_drm_connector_dynamic_init_type_valid ==
[12:29:43] ======== drm_test_drm_connector_dynamic_init_name  =========
[12:29:43] [PASSED] Unknown
[12:29:43] [PASSED] VGA
[12:29:43] [PASSED] DVI-I
[12:29:43] [PASSED] DVI-D
[12:29:43] [PASSED] DVI-A
[12:29:43] [PASSED] Composite
[12:29:43] [PASSED] SVIDEO
[12:29:43] [PASSED] LVDS
[12:29:43] [PASSED] Component
[12:29:43] [PASSED] DIN
[12:29:43] [PASSED] DP
[12:29:43] [PASSED] HDMI-A
[12:29:43] [PASSED] HDMI-B
[12:29:43] [PASSED] TV
[12:29:43] [PASSED] eDP
[12:29:43] [PASSED] Virtual
[12:29:43] [PASSED] DSI
[12:29:43] [PASSED] DPI
[12:29:43] [PASSED] Writeback
[12:29:43] [PASSED] SPI
[12:29:43] [PASSED] USB
[12:29:43] ==== [PASSED] drm_test_drm_connector_dynamic_init_name =====
[12:29:43] =========== [PASSED] drm_connector_dynamic_init ============
[12:29:43] ==== drm_connector_dynamic_register_early (4 subtests) =====
[12:29:43] [PASSED] drm_test_drm_connector_dynamic_register_early_on_list
[12:29:43] [PASSED] drm_test_drm_connector_dynamic_register_early_defer
[12:29:43] [PASSED] drm_test_drm_connector_dynamic_register_early_no_init
[12:29:43] [PASSED] drm_test_drm_connector_dynamic_register_early_no_mode_object
[12:29:43] ====== [PASSED] drm_connector_dynamic_register_early =======
[12:29:43] ======= drm_connector_dynamic_register (7 subtests) ========
[12:29:43] [PASSED] drm_test_drm_connector_dynamic_register_on_list
[12:29:43] [PASSED] drm_test_drm_connector_dynamic_register_no_defer
[12:29:43] [PASSED] drm_test_drm_connector_dynamic_register_no_init
[12:29:43] [PASSED] drm_test_drm_connector_dynamic_register_mode_object
[12:29:43] [PASSED] drm_test_drm_connector_dynamic_register_sysfs
[12:29:43] [PASSED] drm_test_drm_connector_dynamic_register_sysfs_name
[12:29:43] [PASSED] drm_test_drm_connector_dynamic_register_debugfs
[12:29:43] ========= [PASSED] drm_connector_dynamic_register ==========
[12:29:43] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[12:29:43] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[12:29:43] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[12:29:43] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[12:29:43] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[12:29:43] ========== drm_test_get_tv_mode_from_name_valid  ===========
[12:29:43] [PASSED] NTSC
[12:29:43] [PASSED] NTSC-443
[12:29:43] [PASSED] NTSC-J
[12:29:43] [PASSED] PAL
[12:29:43] [PASSED] PAL-M
[12:29:43] [PASSED] PAL-N
[12:29:43] [PASSED] SECAM
[12:29:43] [PASSED] Mono
[12:29:43] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[12:29:43] [PASSED] drm_test_get_tv_mode_from_name_truncated
[12:29:43] ============ [PASSED] drm_get_tv_mode_from_name ============
[12:29:43] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[12:29:43] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[12:29:43] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[12:29:43] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[12:29:43] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[12:29:43] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[12:29:43] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[12:29:43] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid  =
[12:29:43] [PASSED] VIC 96
[12:29:43] [PASSED] VIC 97
[12:29:43] [PASSED] VIC 101
[12:29:43] [PASSED] VIC 102
[12:29:43] [PASSED] VIC 106
[12:29:43] [PASSED] VIC 107
[12:29:43] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[12:29:43] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[12:29:43] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[12:29:43] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[12:29:43] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[12:29:43] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[12:29:43] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[12:29:43] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[12:29:43] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name  ====
[12:29:43] [PASSED] Automatic
[12:29:43] [PASSED] Full
[12:29:43] [PASSED] Limited 16:235
[12:29:43] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[12:29:43] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[12:29:43] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[12:29:43] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[12:29:43] === drm_test_drm_hdmi_connector_get_output_format_name  ====
[12:29:43] [PASSED] RGB
[12:29:43] [PASSED] YUV 4:2:0
[12:29:43] [PASSED] YUV 4:2:2
[12:29:43] [PASSED] YUV 4:4:4
[12:29:43] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[12:29:43] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[12:29:43] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[12:29:43] ============= drm_damage_helper (21 subtests) ==============
[12:29:43] [PASSED] drm_test_damage_iter_no_damage
[12:29:43] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[12:29:43] [PASSED] drm_test_damage_iter_no_damage_src_moved
[12:29:43] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[12:29:43] [PASSED] drm_test_damage_iter_no_damage_not_visible
[12:29:43] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[12:29:43] [PASSED] drm_test_damage_iter_no_damage_no_fb
[12:29:43] [PASSED] drm_test_damage_iter_simple_damage
[12:29:43] [PASSED] drm_test_damage_iter_single_damage
[12:29:43] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[12:29:43] [PASSED] drm_test_damage_iter_single_damage_outside_src
[12:29:43] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[12:29:43] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[12:29:43] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[12:29:43] [PASSED] drm_test_damage_iter_single_damage_src_moved
[12:29:43] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[12:29:43] [PASSED] drm_test_damage_iter_damage
[12:29:43] [PASSED] drm_test_damage_iter_damage_one_intersect
[12:29:43] [PASSED] drm_test_damage_iter_damage_one_outside
[12:29:43] [PASSED] drm_test_damage_iter_damage_src_moved
[12:29:43] [PASSED] drm_test_damage_iter_damage_not_visible
[12:29:43] ================ [PASSED] drm_damage_helper ================
[12:29:43] ============== drm_dp_mst_helper (3 subtests) ==============
[12:29:43] ============== drm_test_dp_mst_calc_pbn_mode  ==============
[12:29:43] [PASSED] Clock 154000 BPP 30 DSC disabled
[12:29:43] [PASSED] Clock 234000 BPP 30 DSC disabled
[12:29:43] [PASSED] Clock 297000 BPP 24 DSC disabled
[12:29:43] [PASSED] Clock 332880 BPP 24 DSC enabled
[12:29:43] [PASSED] Clock 324540 BPP 24 DSC enabled
[12:29:43] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[12:29:43] ============== drm_test_dp_mst_calc_pbn_div  ===============
[12:29:43] [PASSED] Link rate 2000000 lane count 4
[12:29:43] [PASSED] Link rate 2000000 lane count 2
[12:29:43] [PASSED] Link rate 2000000 lane count 1
[12:29:43] [PASSED] Link rate 1350000 lane count 4
[12:29:43] [PASSED] Link rate 1350000 lane count 2
[12:29:43] [PASSED] Link rate 1350000 lane count 1
[12:29:43] [PASSED] Link rate 1000000 lane count 4
[12:29:43] [PASSED] Link rate 1000000 lane count 2
[12:29:43] [PASSED] Link rate 1000000 lane count 1
[12:29:43] [PASSED] Link rate 810000 lane count 4
[12:29:43] [PASSED] Link rate 810000 lane count 2
[12:29:43] [PASSED] Link rate 810000 lane count 1
[12:29:43] [PASSED] Link rate 540000 lane count 4
[12:29:43] [PASSED] Link rate 540000 lane count 2
[12:29:43] [PASSED] Link rate 540000 lane count 1
[12:29:43] [PASSED] Link rate 270000 lane count 4
[12:29:43] [PASSED] Link rate 270000 lane count 2
[12:29:43] [PASSED] Link rate 270000 lane count 1
[12:29:43] [PASSED] Link rate 162000 lane count 4
[12:29:43] [PASSED] Link rate 162000 lane count 2
[12:29:43] [PASSED] Link rate 162000 lane count 1
[12:29:43] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[12:29:43] ========= drm_test_dp_mst_sideband_msg_req_decode  =========
[12:29:43] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[12:29:43] [PASSED] DP_POWER_UP_PHY with port number
[12:29:43] [PASSED] DP_POWER_DOWN_PHY with port number
[12:29:43] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[12:29:43] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[12:29:43] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[12:29:43] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[12:29:43] [PASSED] DP_QUERY_PAYLOAD with port number
[12:29:43] [PASSED] DP_QUERY_PAYLOAD with VCPI
[12:29:43] [PASSED] DP_REMOTE_DPCD_READ with port number
[12:29:43] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[12:29:43] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[12:29:43] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[12:29:43] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[12:29:43] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[12:29:43] [PASSED] DP_REMOTE_I2C_READ with port number
[12:29:43] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[12:29:43] [PASSED] DP_REMOTE_I2C_READ with transactions array
[12:29:43] [PASSED] DP_REMOTE_I2C_WRITE with port number
[12:29:43] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[12:29:43] [PASSED] DP_REMOTE_I2C_WRITE with data array
[12:29:43] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[12:29:43] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[12:29:43] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[12:29:43] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[12:29:43] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[12:29:43] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[12:29:43] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[12:29:43] ================ [PASSED] drm_dp_mst_helper ================
[12:29:43] ================== drm_exec (7 subtests) ===================
[12:29:43] [PASSED] sanitycheck
[12:29:43] [PASSED] test_lock
[12:29:43] [PASSED] test_lock_unlock
[12:29:43] [PASSED] test_duplicates
[12:29:43] [PASSED] test_prepare
[12:29:43] [PASSED] test_prepare_array
[12:29:43] [PASSED] test_multiple_loops
[12:29:43] ==================== [PASSED] drm_exec =====================
[12:29:43] =========== drm_format_helper_test (17 subtests) ===========
[12:29:43] ============== drm_test_fb_xrgb8888_to_gray8  ==============
[12:29:43] [PASSED] single_pixel_source_buffer
[12:29:43] [PASSED] single_pixel_clip_rectangle
[12:29:43] [PASSED] well_known_colors
[12:29:43] [PASSED] destination_pitch
[12:29:43] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[12:29:43] ============= drm_test_fb_xrgb8888_to_rgb332  ==============
[12:29:43] [PASSED] single_pixel_source_buffer
[12:29:43] [PASSED] single_pixel_clip_rectangle
[12:29:43] [PASSED] well_known_colors
[12:29:43] [PASSED] destination_pitch
[12:29:43] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[12:29:43] ============= drm_test_fb_xrgb8888_to_rgb565  ==============
[12:29:43] [PASSED] single_pixel_source_buffer
[12:29:43] [PASSED] single_pixel_clip_rectangle
[12:29:43] [PASSED] well_known_colors
[12:29:43] [PASSED] destination_pitch
[12:29:43] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[12:29:43] ============ drm_test_fb_xrgb8888_to_xrgb1555  =============
[12:29:43] [PASSED] single_pixel_source_buffer
[12:29:43] [PASSED] single_pixel_clip_rectangle
[12:29:43] [PASSED] well_known_colors
[12:29:43] [PASSED] destination_pitch
[12:29:43] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[12:29:43] ============ drm_test_fb_xrgb8888_to_argb1555  =============
[12:29:43] [PASSED] single_pixel_source_buffer
[12:29:43] [PASSED] single_pixel_clip_rectangle
[12:29:43] [PASSED] well_known_colors
[12:29:43] [PASSED] destination_pitch
[12:29:43] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[12:29:43] ============ drm_test_fb_xrgb8888_to_rgba5551  =============
[12:29:43] [PASSED] single_pixel_source_buffer
[12:29:43] [PASSED] single_pixel_clip_rectangle
[12:29:43] [PASSED] well_known_colors
[12:29:43] [PASSED] destination_pitch
[12:29:43] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[12:29:43] ============= drm_test_fb_xrgb8888_to_rgb888  ==============
[12:29:43] [PASSED] single_pixel_source_buffer
[12:29:43] [PASSED] single_pixel_clip_rectangle
[12:29:43] [PASSED] well_known_colors
[12:29:43] [PASSED] destination_pitch
[12:29:43] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[12:29:43] ============= drm_test_fb_xrgb8888_to_bgr888  ==============
[12:29:43] [PASSED] single_pixel_source_buffer
[12:29:43] [PASSED] single_pixel_clip_rectangle
[12:29:43] [PASSED] well_known_colors
[12:29:43] [PASSED] destination_pitch
[12:29:43] ========= [PASSED] drm_test_fb_xrgb8888_to_bgr888 ==========
[12:29:43] ============ drm_test_fb_xrgb8888_to_argb8888  =============
[12:29:43] [PASSED] single_pixel_source_buffer
[12:29:43] [PASSED] single_pixel_clip_rectangle
[12:29:43] [PASSED] well_known_colors
[12:29:43] [PASSED] destination_pitch
[12:29:43] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[12:29:43] =========== drm_test_fb_xrgb8888_to_xrgb2101010  ===========
[12:29:43] [PASSED] single_pixel_source_buffer
[12:29:43] [PASSED] single_pixel_clip_rectangle
[12:29:43] [PASSED] well_known_colors
[12:29:43] [PASSED] destination_pitch
[12:29:43] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[12:29:43] =========== drm_test_fb_xrgb8888_to_argb2101010  ===========
[12:29:43] [PASSED] single_pixel_source_buffer
[12:29:43] [PASSED] single_pixel_clip_rectangle
[12:29:43] [PASSED] well_known_colors
[12:29:43] [PASSED] destination_pitch
[12:29:43] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[12:29:43] ============== drm_test_fb_xrgb8888_to_mono  ===============
[12:29:43] [PASSED] single_pixel_source_buffer
[12:29:43] [PASSED] single_pixel_clip_rectangle
[12:29:43] [PASSED] well_known_colors
[12:29:43] [PASSED] destination_pitch
[12:29:43] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[12:29:43] ==================== drm_test_fb_swab  =====================
[12:29:43] [PASSED] single_pixel_source_buffer
[12:29:43] [PASSED] single_pixel_clip_rectangle
[12:29:43] [PASSED] well_known_colors
[12:29:43] [PASSED] destination_pitch
[12:29:43] ================ [PASSED] drm_test_fb_swab =================
[12:29:43] ============ drm_test_fb_xrgb8888_to_xbgr8888  =============
[12:29:43] [PASSED] single_pixel_source_buffer
[12:29:43] [PASSED] single_pixel_clip_rectangle
[12:29:43] [PASSED] well_known_colors
[12:29:43] [PASSED] destination_pitch
[12:29:43] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[12:29:43] ============ drm_test_fb_xrgb8888_to_abgr8888  =============
[12:29:43] [PASSED] single_pixel_source_buffer
[12:29:43] [PASSED] single_pixel_clip_rectangle
[12:29:43] [PASSED] well_known_colors
[12:29:43] [PASSED] destination_pitch
[12:29:43] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[12:29:43] ================= drm_test_fb_clip_offset  =================
[12:29:43] [PASSED] pass through
[12:29:43] [PASSED] horizontal offset
[12:29:43] [PASSED] vertical offset
[12:29:43] [PASSED] horizontal and vertical offset
[12:29:43] [PASSED] horizontal offset (custom pitch)
[12:29:43] [PASSED] vertical offset (custom pitch)
[12:29:43] [PASSED] horizontal and vertical offset (custom pitch)
[12:29:43] ============= [PASSED] drm_test_fb_clip_offset =============
[12:29:43] =================== drm_test_fb_memcpy  ====================
[12:29:43] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[12:29:43] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[12:29:43] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[12:29:43] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[12:29:43] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[12:29:43] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[12:29:43] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[12:29:43] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[12:29:43] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[12:29:43] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[12:29:43] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[12:29:43] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[12:29:43] =============== [PASSED] drm_test_fb_memcpy ================
[12:29:43] ============= [PASSED] drm_format_helper_test ==============
[12:29:43] ================= drm_format (18 subtests) =================
[12:29:43] [PASSED] drm_test_format_block_width_invalid
[12:29:43] [PASSED] drm_test_format_block_width_one_plane
[12:29:43] [PASSED] drm_test_format_block_width_two_plane
[12:29:43] [PASSED] drm_test_format_block_width_three_plane
[12:29:43] [PASSED] drm_test_format_block_width_tiled
[12:29:43] [PASSED] drm_test_format_block_height_invalid
[12:29:43] [PASSED] drm_test_format_block_height_one_plane
[12:29:43] [PASSED] drm_test_format_block_height_two_plane
[12:29:43] [PASSED] drm_test_format_block_height_three_plane
[12:29:43] [PASSED] drm_test_format_block_height_tiled
[12:29:43] [PASSED] drm_test_format_min_pitch_invalid
[12:29:43] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[12:29:43] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[12:29:43] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[12:29:43] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[12:29:43] [PASSED] drm_test_format_min_pitch_two_plane
[12:29:43] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[12:29:43] [PASSED] drm_test_format_min_pitch_tiled
[12:29:43] =================== [PASSED] drm_format ====================
[12:29:43] ============== drm_framebuffer (10 subtests) ===============
[12:29:43] ========== drm_test_framebuffer_check_src_coords  ==========
[12:29:43] [PASSED] Success: source fits into fb
[12:29:43] [PASSED] Fail: overflowing fb with x-axis coordinate
[12:29:43] [PASSED] Fail: overflowing fb with y-axis coordinate
[12:29:43] [PASSED] Fail: overflowing fb with source width
[12:29:43] [PASSED] Fail: overflowing fb with source height
[12:29:43] ====== [PASSED] drm_test_framebuffer_check_src_coords ======
[12:29:43] [PASSED] drm_test_framebuffer_cleanup
[12:29:43] =============== drm_test_framebuffer_create  ===============
[12:29:43] [PASSED] ABGR8888 normal sizes
[12:29:43] [PASSED] ABGR8888 max sizes
[12:29:43] [PASSED] ABGR8888 pitch greater than min required
[12:29:43] [PASSED] ABGR8888 pitch less than min required
[12:29:43] [PASSED] ABGR8888 Invalid width
[12:29:43] [PASSED] ABGR8888 Invalid buffer handle
[12:29:43] [PASSED] No pixel format
[12:29:43] [PASSED] ABGR8888 Width 0
[12:29:43] [PASSED] ABGR8888 Height 0
[12:29:43] [PASSED] ABGR8888 Out of bound height * pitch combination
[12:29:43] [PASSED] ABGR8888 Large buffer offset
[12:29:43] [PASSED] ABGR8888 Buffer offset for inexistent plane
[12:29:43] [PASSED] ABGR8888 Invalid flag
[12:29:43] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[12:29:43] [PASSED] ABGR8888 Valid buffer modifier
[12:29:43] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[12:29:43] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[12:29:43] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[12:29:43] [PASSED] NV12 Normal sizes
[12:29:43] [PASSED] NV12 Max sizes
[12:29:43] [PASSED] NV12 Invalid pitch
[12:29:43] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[12:29:43] [PASSED] NV12 different  modifier per-plane
[12:29:43] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[12:29:43] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[12:29:43] [PASSED] NV12 Modifier for inexistent plane
[12:29:43] [PASSED] NV12 Handle for inexistent plane
[12:29:43] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[12:29:43] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[12:29:43] [PASSED] YVU420 Normal sizes
[12:29:43] [PASSED] YVU420 Max sizes
[12:29:43] [PASSED] YVU420 Invalid pitch
[12:29:43] [PASSED] YVU420 Different pitches
[12:29:43] [PASSED] YVU420 Different buffer offsets/pitches
[12:29:43] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[12:29:43] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[12:29:43] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[12:29:43] [PASSED] YVU420 Valid modifier
[12:29:43] [PASSED] YVU420 Different modifiers per plane
[12:29:43] [PASSED] YVU420 Modifier for inexistent plane
[12:29:43] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR)
[12:29:43] [PASSED] X0L2 Normal sizes
[12:29:43] [PASSED] X0L2 Max sizes
[12:29:43] [PASSED] X0L2 Invalid pitch
[12:29:43] [PASSED] X0L2 Pitch greater than minimum required
[12:29:43] [PASSED] X0L2 Handle for inexistent plane
[12:29:43] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[12:29:43] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[12:29:43] [PASSED] X0L2 Valid modifier
[12:29:43] [PASSED] X0L2 Modifier for inexistent plane
[12:29:43] =========== [PASSED] drm_test_framebuffer_create ===========
[12:29:43] [PASSED] drm_test_framebuffer_free
[12:29:43] [PASSED] drm_test_framebuffer_init
[12:29:43] [PASSED] drm_test_framebuffer_init_bad_format
[12:29:43] [PASSED] drm_test_framebuffer_init_dev_mismatch
[12:29:43] [PASSED] drm_test_framebuffer_lookup
[12:29:43] [PASSED] drm_test_framebuffer_lookup_inexistent
[12:29:43] [PASSED] drm_test_framebuffer_modifiers_not_supported
[12:29:43] ================= [PASSED] drm_framebuffer =================
[12:29:43] ================ drm_gem_shmem (8 subtests) ================
[12:29:43] [PASSED] drm_gem_shmem_test_obj_create
[12:29:43] [PASSED] drm_gem_shmem_test_obj_create_private
[12:29:43] [PASSED] drm_gem_shmem_test_pin_pages
[12:29:43] [PASSED] drm_gem_shmem_test_vmap
[12:29:43] [PASSED] drm_gem_shmem_test_get_sg_table
[12:29:43] [PASSED] drm_gem_shmem_test_get_pages_sgt
[12:29:43] [PASSED] drm_gem_shmem_test_madvise
[12:29:43] [PASSED] drm_gem_shmem_test_purge
[12:29:43] ================== [PASSED] drm_gem_shmem ==================
[12:29:43] === drm_atomic_helper_connector_hdmi_check (29 subtests) ===
[12:29:43] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[12:29:43] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[12:29:43] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[12:29:43] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[12:29:43] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[12:29:43] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[12:29:43] ====== drm_test_check_broadcast_rgb_cea_mode_yuv420  =======
[12:29:43] [PASSED] Automatic
[12:29:43] [PASSED] Full
[12:29:43] [PASSED] Limited 16:235
[12:29:43] == [PASSED] drm_test_check_broadcast_rgb_cea_mode_yuv420 ===
[12:29:43] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[12:29:43] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[12:29:43] [PASSED] drm_test_check_disable_connector
[12:29:43] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[12:29:43] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_rgb
[12:29:43] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_yuv420
[12:29:43] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422
[12:29:43] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420
[12:29:43] [PASSED] drm_test_check_driver_unsupported_fallback_yuv420
[12:29:43] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[12:29:43] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[12:29:43] [PASSED] drm_test_check_output_bpc_dvi
[12:29:43] [PASSED] drm_test_check_output_bpc_format_vic_1
[12:29:43] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[12:29:43] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[12:29:43] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[12:29:43] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[12:29:43] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[12:29:43] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[12:29:43] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[12:29:43] ============ drm_test_check_hdmi_color_format  =============
[12:29:43] [PASSED] AUTO -> RGB
[12:29:43] [PASSED] YCBCR422 -> YUV422
[12:29:43] [PASSED] YCBCR420 -> YUV420
[12:29:43] [PASSED] YCBCR444 -> YUV444
[12:29:43] [PASSED] RGB -> RGB
[12:29:43] ======== [PASSED] drm_test_check_hdmi_color_format =========
[12:29:43] ======== drm_test_check_hdmi_color_format_420_only  ========
[12:29:43] [PASSED] RGB should fail
[12:29:43] [PASSED] YUV444 should fail
[12:29:43] [PASSED] YUV422 should fail
[12:29:43] [PASSED] YUV420 should work
[12:29:43] ==== [PASSED] drm_test_check_hdmi_color_format_420_only ====
[12:29:43] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[12:29:43] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[12:29:43] [PASSED] drm_test_check_broadcast_rgb_value
[12:29:43] [PASSED] drm_test_check_bpc_8_value
[12:29:43] [PASSED] drm_test_check_bpc_10_value
[12:29:43] [PASSED] drm_test_check_bpc_12_value
[12:29:43] [PASSED] drm_test_check_format_value
[12:29:43] [PASSED] drm_test_check_tmds_char_value
[12:29:43] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[12:29:43] = drm_atomic_helper_connector_hdmi_mode_valid (7 subtests) =
[12:29:43] [PASSED] drm_test_check_mode_valid
[12:29:43] [PASSED] drm_test_check_mode_valid_reject
[12:29:43] [PASSED] drm_test_check_mode_valid_reject_rate
[12:29:43] [PASSED] drm_test_check_mode_valid_reject_max_clock
[12:29:43] [PASSED] drm_test_check_mode_valid_yuv420_only_max_clock
[12:29:43] [PASSED] drm_test_check_mode_valid_reject_yuv420_only_connector
[12:29:43] [PASSED] drm_test_check_mode_valid_accept_yuv420_also_connector_rgb
[12:29:43] === [PASSED] drm_atomic_helper_connector_hdmi_mode_valid ===
[12:29:43] = drm_atomic_helper_connector_hdmi_infoframes (5 subtests) =
[12:29:43] [PASSED] drm_test_check_infoframes
[12:29:43] [PASSED] drm_test_check_reject_avi_infoframe
[12:29:43] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_8
[12:29:43] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_10
[12:29:43] [PASSED] drm_test_check_reject_audio_infoframe
[12:29:43] === [PASSED] drm_atomic_helper_connector_hdmi_infoframes ===
[12:29:43] ================= drm_managed (2 subtests) =================
[12:29:43] [PASSED] drm_test_managed_release_action
[12:29:43] [PASSED] drm_test_managed_run_action
[12:29:43] =================== [PASSED] drm_managed ===================
[12:29:43] =================== drm_mm (6 subtests) ====================
[12:29:43] [PASSED] drm_test_mm_init
[12:29:43] [PASSED] drm_test_mm_debug
[12:29:43] [PASSED] drm_test_mm_align32
[12:29:43] [PASSED] drm_test_mm_align64
[12:29:43] [PASSED] drm_test_mm_lowest
[12:29:43] [PASSED] drm_test_mm_highest
[12:29:43] ===================== [PASSED] drm_mm ======================
[12:29:43] ============= drm_modes_analog_tv (5 subtests) =============
[12:29:43] [PASSED] drm_test_modes_analog_tv_mono_576i
[12:29:43] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[12:29:43] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[12:29:43] [PASSED] drm_test_modes_analog_tv_pal_576i
[12:29:43] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[12:29:43] =============== [PASSED] drm_modes_analog_tv ===============
[12:29:43] ============== drm_panic_helper (3 subtests) ===============
[12:29:43] ============= drm_test_panic_screen_user_map  ==============
[12:29:43] [PASSED] Panic screen user, mode: 1024 x 768 	XR24 little-endian (0x34325258)
[12:29:43] [PASSED] Panic screen user, mode: 494 x 494 	XR24 little-endian (0x34325258)
[12:29:43] [PASSED] Panic screen user, mode: 1920 x 1080 	XR24 little-endian (0x34325258)
[12:29:43] [PASSED] Panic screen user, mode: 1024 x 768 	RG16 little-endian (0x36314752)
[12:29:43] [PASSED] Panic screen user, mode: 1024 x 768 	RG24 little-endian (0x34324752)
[12:29:43] [PASSED] Panic screen kmsg, mode: 1024 x 768 	XR24 little-endian (0x34325258)
[12:29:43] [PASSED] Panic screen kmsg, mode: 494 x 494 	XR24 little-endian (0x34325258)
[12:29:43] [PASSED] Panic screen kmsg, mode: 1920 x 1080 	XR24 little-endian (0x34325258)
[12:29:43] [PASSED] Panic screen kmsg, mode: 1024 x 768 	RG16 little-endian (0x36314752)
[12:29:43] [PASSED] Panic screen kmsg, mode: 1024 x 768 	RG24 little-endian (0x34324752)
[12:29:43] ========= [PASSED] drm_test_panic_screen_user_map ==========
[12:29:43] ============= drm_test_panic_screen_user_page  =============
[12:29:43] [PASSED] Panic screen user, mode: 1024 x 768 	XR24 little-endian (0x34325258)
[12:29:43] [PASSED] Panic screen user, mode: 494 x 494 	XR24 little-endian (0x34325258)
[12:29:43] [PASSED] Panic screen user, mode: 1920 x 1080 	XR24 little-endian (0x34325258)
[12:29:43] [PASSED] Panic screen user, mode: 1024 x 768 	RG16 little-endian (0x36314752)
[12:29:43] [PASSED] Panic screen user, mode: 1024 x 768 	RG24 little-endian (0x34324752)
[12:29:43] [PASSED] Panic screen kmsg, mode: 1024 x 768 	XR24 little-endian (0x34325258)
[12:29:43] [PASSED] Panic screen kmsg, mode: 494 x 494 	XR24 little-endian (0x34325258)
[12:29:43] [PASSED] Panic screen kmsg, mode: 1920 x 1080 	XR24 little-endian (0x34325258)
[12:29:43] [PASSED] Panic screen kmsg, mode: 1024 x 768 	RG16 little-endian (0x36314752)
[12:29:43] [PASSED] Panic screen kmsg, mode: 1024 x 768 	RG24 little-endian (0x34324752)
[12:29:43] ========= [PASSED] drm_test_panic_screen_user_page =========
[12:29:43] ========== drm_test_panic_screen_user_set_pixel  ===========
[12:29:43] [PASSED] Panic screen user, mode: 1024 x 768 	XR24 little-endian (0x34325258)
[12:29:43] [PASSED] Panic screen user, mode: 494 x 494 	XR24 little-endian (0x34325258)
[12:29:43] [PASSED] Panic screen user, mode: 1920 x 1080 	XR24 little-endian (0x34325258)
[12:29:43] [PASSED] Panic screen user, mode: 1024 x 768 	RG16 little-endian (0x36314752)
[12:29:43] [PASSED] Panic screen user, mode: 1024 x 768 	RG24 little-endian (0x34324752)
[12:29:43] [PASSED] Panic screen kmsg, mode: 1024 x 768 	XR24 little-endian (0x34325258)
[12:29:43] [PASSED] Panic screen kmsg, mode: 494 x 494 	XR24 little-endian (0x34325258)
[12:29:43] [PASSED] Panic screen kmsg, mode: 1920 x 1080 	XR24 little-endian (0x34325258)
[12:29:43] [PASSED] Panic screen kmsg, mode: 1024 x 768 	RG16 little-endian (0x36314752)
[12:29:43] [PASSED] Panic screen kmsg, mode: 1024 x 768 	RG24 little-endian (0x34324752)
[12:29:43] ====== [PASSED] drm_test_panic_screen_user_set_pixel =======
[12:29:43] ================ [PASSED] drm_panic_helper =================
[12:29:43] ============== drm_plane_helper (2 subtests) ===============
[12:29:43] =============== drm_test_check_plane_state  ================
[12:29:43] [PASSED] clipping_simple
[12:29:43] [PASSED] clipping_rotate_reflect
[12:29:43] [PASSED] positioning_simple
[12:29:43] [PASSED] upscaling
[12:29:43] [PASSED] downscaling
[12:29:43] [PASSED] rounding1
[12:29:43] [PASSED] rounding2
[12:29:43] [PASSED] rounding3
[12:29:43] [PASSED] rounding4
[12:29:43] =========== [PASSED] drm_test_check_plane_state ============
[12:29:43] =========== drm_test_check_invalid_plane_state  ============
[12:29:43] [PASSED] positioning_invalid
[12:29:43] [PASSED] upscaling_invalid
[12:29:43] [PASSED] downscaling_invalid
[12:29:43] ======= [PASSED] drm_test_check_invalid_plane_state ========
[12:29:43] ================ [PASSED] drm_plane_helper =================
[12:29:43] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[12:29:43] ====== drm_test_connector_helper_tv_get_modes_check  =======
[12:29:43] [PASSED] None
[12:29:43] [PASSED] PAL
[12:29:43] [PASSED] NTSC
[12:29:43] [PASSED] Both, NTSC Default
[12:29:43] [PASSED] Both, PAL Default
[12:29:43] [PASSED] Both, NTSC Default, with PAL on command-line
[12:29:43] [PASSED] Both, PAL Default, with NTSC on command-line
[12:29:43] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[12:29:43] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[12:29:43] ================== drm_rect (9 subtests) ===================
[12:29:43] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[12:29:43] [PASSED] drm_test_rect_clip_scaled_not_clipped
[12:29:43] [PASSED] drm_test_rect_clip_scaled_clipped
[12:29:43] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[12:29:43] ================= drm_test_rect_intersect  =================
[12:29:43] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[12:29:43] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[12:29:43] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[12:29:43] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[12:29:43] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[12:29:43] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[12:29:43] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[12:29:43] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[12:29:43] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[12:29:43] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[12:29:43] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[12:29:43] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[12:29:43] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[12:29:43] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[12:29:43] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[12:29:43] ============= [PASSED] drm_test_rect_intersect =============
[12:29:43] ================ drm_test_rect_calc_hscale  ================
[12:29:43] [PASSED] normal use
[12:29:43] [PASSED] out of max range
[12:29:43] [PASSED] out of min range
[12:29:43] [PASSED] zero dst
[12:29:43] [PASSED] negative src
[12:29:43] [PASSED] negative dst
[12:29:43] ============ [PASSED] drm_test_rect_calc_hscale ============
[12:29:43] ================ drm_test_rect_calc_vscale  ================
[12:29:43] [PASSED] normal use
[12:29:43] [PASSED] out of max range
[12:29:43] [PASSED] out of min range
[12:29:43] [PASSED] zero dst
[12:29:43] [PASSED] negative src
[12:29:43] [PASSED] negative dst
[12:29:43] ============ [PASSED] drm_test_rect_calc_vscale ============
[12:29:43] ================== drm_test_rect_rotate  ===================
[12:29:43] [PASSED] reflect-x
[12:29:43] [PASSED] reflect-y
[12:29:43] [PASSED] rotate-0
[12:29:43] [PASSED] rotate-90
[12:29:43] [PASSED] rotate-180
[12:29:43] [PASSED] rotate-270
[12:29:43] ============== [PASSED] drm_test_rect_rotate ===============
[12:29:43] ================ drm_test_rect_rotate_inv  =================
[12:29:43] [PASSED] reflect-x
[12:29:43] [PASSED] reflect-y
[12:29:43] [PASSED] rotate-0
[12:29:43] [PASSED] rotate-90
[12:29:43] [PASSED] rotate-180
[12:29:43] [PASSED] rotate-270
[12:29:43] ============ [PASSED] drm_test_rect_rotate_inv =============
[12:29:43] ==================== [PASSED] drm_rect =====================
[12:29:43] ============ drm_sysfb_modeset_test (1 subtest) ============
[12:29:43] ============ drm_test_sysfb_build_fourcc_list  =============
[12:29:43] [PASSED] no native formats
[12:29:43] [PASSED] XRGB8888 as native format
[12:29:43] [PASSED] remove duplicates
[12:29:43] [PASSED] convert alpha formats
[12:29:43] [PASSED] random formats
[12:29:43] ======== [PASSED] drm_test_sysfb_build_fourcc_list =========
[12:29:43] ============= [PASSED] drm_sysfb_modeset_test ==============
[12:29:43] ================== drm_fixp (2 subtests) ===================
[12:29:43] [PASSED] drm_test_int2fixp
[12:29:43] [PASSED] drm_test_sm2fixp
[12:29:43] ==================== [PASSED] drm_fixp =====================
[12:29:43] ============================================================
[12:29:43] Testing complete. Ran 667 tests: passed: 667
[12:29:43] Elapsed time: 28.070s total, 2.516s configuring, 25.087s building, 0.456s running

+ for kcfg in "${kunitconfigs[@]}"
+ [[ ! -f /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig ]]
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig
[12:29:43] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[12:29:46] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[12:29:56] Starting KUnit Kernel (1/1)...
[12:29:56] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[12:29:56] ================= ttm_device (5 subtests) ==================
[12:29:56] [PASSED] ttm_device_init_basic
[12:29:56] [PASSED] ttm_device_init_multiple
[12:29:56] [PASSED] ttm_device_fini_basic
[12:29:56] [PASSED] ttm_device_init_no_vma_man
[12:29:56] ================== ttm_device_init_pools  ==================
[12:29:56] [PASSED] No DMA allocations, no DMA32 required
[12:29:56] [PASSED] DMA allocations, DMA32 required
[12:29:56] [PASSED] No DMA allocations, DMA32 required
[12:29:56] [PASSED] DMA allocations, no DMA32 required
[12:29:56] ============== [PASSED] ttm_device_init_pools ==============
[12:29:56] =================== [PASSED] ttm_device ====================
[12:29:56] ================== ttm_pool (8 subtests) ===================
[12:29:56] ================== ttm_pool_alloc_basic  ===================
[12:29:56] [PASSED] One page
[12:29:56] [PASSED] More than one page
[12:29:56] [PASSED] Above the allocation limit
[12:29:56] [PASSED] One page, with coherent DMA mappings enabled
[12:29:56] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[12:29:56] ============== [PASSED] ttm_pool_alloc_basic ===============
[12:29:56] ============== ttm_pool_alloc_basic_dma_addr  ==============
[12:29:56] [PASSED] One page
[12:29:56] [PASSED] More than one page
[12:29:56] [PASSED] Above the allocation limit
[12:29:56] [PASSED] One page, with coherent DMA mappings enabled
[12:29:56] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[12:29:56] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[12:29:56] [PASSED] ttm_pool_alloc_order_caching_match
[12:29:56] [PASSED] ttm_pool_alloc_caching_mismatch
[12:29:56] [PASSED] ttm_pool_alloc_order_mismatch
[12:29:56] [PASSED] ttm_pool_free_dma_alloc
[12:29:56] [PASSED] ttm_pool_free_no_dma_alloc
[12:29:56] [PASSED] ttm_pool_fini_basic
[12:29:56] ==================== [PASSED] ttm_pool =====================
[12:29:56] ================ ttm_resource (8 subtests) =================
[12:29:56] ================= ttm_resource_init_basic  =================
[12:29:56] [PASSED] Init resource in TTM_PL_SYSTEM
[12:29:56] [PASSED] Init resource in TTM_PL_VRAM
[12:29:56] [PASSED] Init resource in a private placement
[12:29:56] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[12:29:56] ============= [PASSED] ttm_resource_init_basic =============
[12:29:56] [PASSED] ttm_resource_init_pinned
[12:29:56] [PASSED] ttm_resource_fini_basic
[12:29:56] [PASSED] ttm_resource_manager_init_basic
[12:29:56] [PASSED] ttm_resource_manager_usage_basic
[12:29:56] [PASSED] ttm_resource_manager_set_used_basic
[12:29:56] [PASSED] ttm_sys_man_alloc_basic
[12:29:56] [PASSED] ttm_sys_man_free_basic
[12:29:56] ================== [PASSED] ttm_resource ===================
[12:29:56] =================== ttm_tt (15 subtests) ===================
[12:29:56] ==================== ttm_tt_init_basic  ====================
[12:29:56] [PASSED] Page-aligned size
[12:29:56] [PASSED] Extra pages requested
[12:29:56] ================ [PASSED] ttm_tt_init_basic ================
[12:29:56] [PASSED] ttm_tt_init_misaligned
[12:29:56] [PASSED] ttm_tt_fini_basic
[12:29:56] [PASSED] ttm_tt_fini_sg
[12:29:56] [PASSED] ttm_tt_fini_shmem
[12:29:56] [PASSED] ttm_tt_create_basic
[12:29:56] [PASSED] ttm_tt_create_invalid_bo_type
[12:29:56] [PASSED] ttm_tt_create_ttm_exists
[12:29:56] [PASSED] ttm_tt_create_failed
[12:29:56] [PASSED] ttm_tt_destroy_basic
[12:29:56] [PASSED] ttm_tt_populate_null_ttm
[12:29:56] [PASSED] ttm_tt_populate_populated_ttm
[12:29:56] [PASSED] ttm_tt_unpopulate_basic
[12:29:56] [PASSED] ttm_tt_unpopulate_empty_ttm
[12:29:56] [PASSED] ttm_tt_swapin_basic
[12:29:56] ===================== [PASSED] ttm_tt ======================
[12:29:56] =================== ttm_bo (14 subtests) ===================
[12:29:56] =========== ttm_bo_reserve_optimistic_no_ticket  ===========
[12:29:56] [PASSED] Cannot be interrupted and sleeps
[12:29:56] [PASSED] Cannot be interrupted, locks straight away
[12:29:56] [PASSED] Can be interrupted, sleeps
[12:29:56] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[12:29:56] [PASSED] ttm_bo_reserve_locked_no_sleep
[12:29:56] [PASSED] ttm_bo_reserve_no_wait_ticket
[12:29:56] [PASSED] ttm_bo_reserve_double_resv
[12:29:56] [PASSED] ttm_bo_reserve_interrupted
[12:29:56] [PASSED] ttm_bo_reserve_deadlock
[12:29:56] [PASSED] ttm_bo_unreserve_basic
[12:29:56] [PASSED] ttm_bo_unreserve_pinned
[12:29:56] [PASSED] ttm_bo_unreserve_bulk
[12:29:56] [PASSED] ttm_bo_fini_basic
[12:29:56] [PASSED] ttm_bo_fini_shared_resv
[12:29:56] [PASSED] ttm_bo_pin_basic
[12:29:56] [PASSED] ttm_bo_pin_unpin_resource
[12:29:56] [PASSED] ttm_bo_multiple_pin_one_unpin
[12:29:56] ===================== [PASSED] ttm_bo ======================
[12:29:56] ============== ttm_bo_validate (22 subtests) ===============
[12:29:56] ============== ttm_bo_init_reserved_sys_man  ===============
[12:29:56] [PASSED] Buffer object for userspace
[12:29:56] [PASSED] Kernel buffer object
[12:29:56] [PASSED] Shared buffer object
[12:29:56] ========== [PASSED] ttm_bo_init_reserved_sys_man ===========
[12:29:56] ============== ttm_bo_init_reserved_mock_man  ==============
[12:29:56] [PASSED] Buffer object for userspace
[12:29:56] [PASSED] Kernel buffer object
[12:29:56] [PASSED] Shared buffer object
[12:29:56] ========== [PASSED] ttm_bo_init_reserved_mock_man ==========
[12:29:56] [PASSED] ttm_bo_init_reserved_resv
[12:29:56] ================== ttm_bo_validate_basic  ==================
[12:29:56] [PASSED] Buffer object for userspace
[12:29:56] [PASSED] Kernel buffer object
[12:29:56] [PASSED] Shared buffer object
[12:29:56] ============== [PASSED] ttm_bo_validate_basic ==============
[12:29:56] [PASSED] ttm_bo_validate_invalid_placement
[12:29:56] ============= ttm_bo_validate_same_placement  ==============
[12:29:56] [PASSED] System manager
[12:29:56] [PASSED] VRAM manager
[12:29:56] ========= [PASSED] ttm_bo_validate_same_placement ==========
[12:29:56] [PASSED] ttm_bo_validate_failed_alloc
[12:29:56] [PASSED] ttm_bo_validate_pinned
[12:29:56] [PASSED] ttm_bo_validate_busy_placement
[12:29:56] ================ ttm_bo_validate_multihop  =================
[12:29:56] [PASSED] Buffer object for userspace
[12:29:56] [PASSED] Kernel buffer object
[12:29:56] [PASSED] Shared buffer object
[12:29:56] ============ [PASSED] ttm_bo_validate_multihop =============
[12:29:56] ========== ttm_bo_validate_no_placement_signaled  ==========
[12:29:56] [PASSED] Buffer object in system domain, no page vector
[12:29:56] [PASSED] Buffer object in system domain with an existing page vector
[12:29:56] ====== [PASSED] ttm_bo_validate_no_placement_signaled ======
[12:29:56] ======== ttm_bo_validate_no_placement_not_signaled  ========
[12:29:56] [PASSED] Buffer object for userspace
[12:29:56] [PASSED] Kernel buffer object
[12:29:56] [PASSED] Shared buffer object
[12:29:56] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ====
[12:29:56] [PASSED] ttm_bo_validate_move_fence_signaled
[12:29:56] ========= ttm_bo_validate_move_fence_not_signaled  =========
[12:29:56] [PASSED] Waits for GPU
[12:29:56] [PASSED] Tries to lock straight away
[12:29:56] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled =====
[12:29:56] [PASSED] ttm_bo_validate_swapout
[12:29:56] [PASSED] ttm_bo_validate_happy_evict
[12:29:56] [PASSED] ttm_bo_validate_all_pinned_evict
[12:29:56] [PASSED] ttm_bo_validate_allowed_only_evict
[12:29:56] [PASSED] ttm_bo_validate_deleted_evict
[12:29:56] [PASSED] ttm_bo_validate_busy_domain_evict
[12:29:56] [PASSED] ttm_bo_validate_evict_gutting
[12:29:56] [PASSED] ttm_bo_validate_recrusive_evict
[12:29:56] ================= [PASSED] ttm_bo_validate =================
[12:29:56] ============================================================
[12:29:56] Testing complete. Ran 102 tests: passed: 102
[12:29:56] Elapsed time: 12.931s total, 2.478s configuring, 10.238s building, 0.184s running

+ for kcfg in "${kunitconfigs[@]}"
+ [[ ! -f /kernel/drivers/dma-buf/.kunitconfig ]]
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/dma-buf/.kunitconfig
[12:29:56] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[12:29:59] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[12:30:08] Starting KUnit Kernel (1/1)...
[12:30:08] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[12:30:08] =============== dma-buf-fence (12 subtests) ================
[12:30:08] [PASSED] test_sanitycheck
[12:30:08] [PASSED] test_signaling
[12:30:08] [PASSED] test_add_callback
[12:30:08] [PASSED] test_late_add_callback
[12:30:08] [PASSED] test_rm_callback
[12:30:08] [PASSED] test_late_rm_callback
[12:30:08] [PASSED] test_status
[12:30:08] [PASSED] test_error
[12:30:08] [PASSED] test_wait
[12:30:08] [PASSED] test_wait_timeout
[12:30:08] [PASSED] test_stub
[12:30:08] [SKIPPED] test_race_signal_callback (requires at least 2 CPUs)
[12:30:08] ================== [PASSED] dma-buf-fence ==================
[12:30:08] ============ dma-buf-fence-chain (11 subtests) =============
[12:30:08] [PASSED] test_sanitycheck
[12:30:08] [PASSED] test_find_seqno
[12:30:08] [PASSED] test_find_signaled
[12:30:08] [PASSED] test_find_out_of_order
[12:30:13] [PASSED] test_find_gap
[12:30:13] [PASSED] test_find_race
[12:30:13] [PASSED] test_signal_forward
[12:30:13] [PASSED] test_signal_backward
[12:30:13] [PASSED] test_wait_forward
[12:30:13] [PASSED] test_wait_backward
[12:30:13] [PASSED] test_wait_random
[12:30:13] =============== [PASSED] dma-buf-fence-chain ===============
[12:30:13] ============ dma-buf-fence-unwrap (11 subtests) ============
[12:30:13] [PASSED] test_sanitycheck
[12:30:13] [PASSED] test_unwrap_array
[12:30:13] [PASSED] test_unwrap_chain
[12:30:13] [PASSED] test_unwrap_chain_array
[12:30:13] [PASSED] test_unwrap_merge
[12:30:13] [PASSED] test_unwrap_merge_duplicate
[12:30:13] [PASSED] test_unwrap_merge_seqno
[12:30:13] [PASSED] test_unwrap_merge_order
[12:30:13] [PASSED] test_unwrap_merge_complex
[12:30:13] [PASSED] test_unwrap_merge_complex_seqno
[12:30:13] [PASSED] test_dedup_empty
[12:30:13] ============== [PASSED] dma-buf-fence-unwrap ===============
[12:30:13] ================ dma-buf-resv (5 subtests) =================
[12:30:13] [PASSED] test_sanitycheck
[12:30:13] ===================== test_signaling  ======================
[12:30:13] [PASSED] kernel
[12:30:13] [PASSED] write
[12:30:13] [PASSED] read
[12:30:13] [PASSED] bookkeep
[12:30:13] ================= [PASSED] test_signaling ==================
[12:30:13] ====================== test_for_each  ======================
[12:30:13] [PASSED] kernel
[12:30:13] [PASSED] write
[12:30:13] [PASSED] read
[12:30:13] [PASSED] bookkeep
[12:30:13] ================== [PASSED] test_for_each ==================
[12:30:13] ================= test_for_each_unlocked  ==================
[12:30:13] [PASSED] kernel
[12:30:13] [PASSED] write
[12:30:13] [PASSED] read
[12:30:13] [PASSED] bookkeep
[12:30:13] ============= [PASSED] test_for_each_unlocked ==============
[12:30:13] ===================== test_get_fences  =====================
[12:30:13] [PASSED] kernel
[12:30:13] [PASSED] write
[12:30:13] [PASSED] read
[12:30:13] [PASSED] bookkeep
[12:30:13] ================= [PASSED] test_get_fences =================
[12:30:13] ================== [PASSED] dma-buf-resv ===================
[12:30:13] ============================================================
[12:30:13] Testing complete. Ran 51 tests: passed: 50, skipped: 1
[12:30:13] Elapsed time: 16.476s total, 2.500s configuring, 8.704s building, 5.262s running

+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel



^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 06/13] drm/i915/dpt: Compute DPT size in the DPT code
  2026-11-11 11:31   ` sashiko-bot
@ 2026-11-11 12:39     ` Ville Syrjälä
  0 siblings, 0 replies; 20+ messages in thread
From: Ville Syrjälä @ 2026-11-11 12:39 UTC (permalink / raw)
  To: sashiko-reviews; +Cc: intel-gfx, intel-xe

On Wed, Nov 11, 2026 at 11:31:06AM +0000, sashiko-bot@kernel.org wrote:
> Thank you for your contribution! Sashiko AI review found no new issues
> in this patch, but noticed 1 related pre-existing issue it does not
> introduce:
> - [High] drm/xe/display: double BO unpin on __intel_fbdev_fb_alloc()
>   error path [1]
> --
> 
> commit ae1435739339ed58396679163558aae13db1d253
> Author: Ville Syrjälä <ville.syrjala@linux.intel.com>
> 
> drm/i915/dpt: Compute DPT size in the DPT code
> 
> This commit passes the GTT view instead of a precomputed size to
> intel_parent_dpt_create() so that the DPT code computes the DPT size for
> both normal and remapped views.
> 
> > diff --git a/drivers/gpu/drm/i915/display/intel_fb.c b/drivers/gpu/drm/i915/display/intel_fb.c
> > index b3344e3f187fb..35f1d5dd31d7d 100644
> > --- a/drivers/gpu/drm/i915/display/intel_fb.c
> > +++ b/drivers/gpu/drm/i915/display/intel_fb.c
> > @@ -2275,13 +2275,15 @@ int intel_framebuffer_init(struct intel_framebuffer *intel_fb,
> >  
> >  	if (intel_fb_uses_dpt(fb)) {
> >  		struct drm_gem_object *obj = intel_fb_bo(&intel_fb->base);
> > +		const struct intel_gtt_view *view;
> >  		struct intel_dpt *dpt;
> > -		size_t size = 0;
> >  
> >  		if (intel_fb_needs_pot_stride_remap(intel_fb))
> > -			size = intel_remapped_info_size(&intel_fb->remapped_view.gtt.remapped);
> > +			view = &intel_fb->remapped_view.gtt;
> > +		else
> > +			view = &intel_fb->normal_view.gtt;
> >  
> > -		dpt = intel_parent_dpt_create(display, obj, size);
> > +		dpt = intel_parent_dpt_create(display, obj, view);
> >  		if (IS_ERR(dpt)) {
> >  			drm_dbg_kms(display->drm, "failed to create DPT\n");
> >  			ret = PTR_ERR(dpt);
> 
> [Severity: High]
> This problem wasn't introduced by this patch, but can failing in
> intel_framebuffer_init() after intel_bo_framebuffer_init() cause a double
> BO unpin on Xe when called from __intel_fbdev_fb_alloc() [1]?
> 
> In __intel_fbdev_fb_alloc(), intel_bo_fbdev_create() allocates the BO via
> xe_bo_create_pin_map_novm() with XE_BO_FLAG_PINNED set and a pin count of
> 1, and xe_display_bo_framebuffer_init() only takes a reference without
> pinning it again.  If a later step in intel_framebuffer_init() fails and
> jumps to err_bo_framebuffer_fini, xe_display_bo_framebuffer_fini() sees
> XE_BO_FLAG_PINNED and unpins the BO:
> 
> drivers/gpu/drm/xe/display/xe_display_bo.c:xe_display_bo_framebuffer_fini() {
> 	struct xe_bo *bo = gem_to_xe_bo(obj);
> 
> 	if (bo->flags & XE_BO_FLAG_PINNED) {
> 		/* Unpin our kernel fb first */
> 		xe_bo_lock(bo, false);
> 		xe_bo_unpin(bo);
> 		xe_bo_unlock(bo);
> 	}
> 	xe_bo_put(bo);
> }
> 
> When control returns to __intel_fbdev_fb_alloc(), error handling calls
> intel_bo_fbdev_destroy() -> xe_display_bo_fbdev_destroy() ->
> xe_bo_unpin_map_no_vm(), which unpins the BO a second time, triggering
> assertions in xe_bo_unpin() and underflowing bo->pin_count in
> ttm_bo_unpin().

Yes, the xe pin_map() stuff is broken by design. I've mentioned it
before, and I think the correct way to fix it is by making it a
custom object type in xe, and have the object destructor itself do
the needed cleanup.

> 
> [1] https://sashiko.dev/#/bug/linux-227b0044-5f2a-4c7c-81e6-93b67cb4f477
> 
> -- 
> Sashiko AI review · https://sashiko.dev/#/patchset/20261111112007.16790-1-ville.syrjala@linux.intel.com?part=6

-- 
Ville Syrjälä
Intel

^ permalink raw reply	[flat|nested] 20+ messages in thread

* ✓ Xe.CI.BAT: success for drm/i915/dpt: Optimize i915 DPT
  2026-11-11 11:19 [PATCH 00/13] drm/i915/dpt: Optimize i915 DPT Ville Syrjala
                   ` (14 preceding siblings ...)
  2026-11-11 12:30 ` ✓ CI.KUnit: success " Patchwork
@ 2026-11-11 13:05 ` Patchwork
  2026-11-11 20:29 ` ✓ Xe.CI.FULL: " Patchwork
  16 siblings, 0 replies; 20+ messages in thread
From: Patchwork @ 2026-11-11 13:05 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: intel-xe

[-- Attachment #1: Type: text/plain, Size: 854 bytes --]

== Series Details ==

Series: drm/i915/dpt: Optimize i915 DPT
URL   : https://patchwork.freedesktop.org/series/178310/
State : success

== Summary ==

CI Bug Log - changes from xe-6110-e737af2078e34650a9cfea4622133eff88808dd5_BAT -> xe-pw-178310v1_BAT
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

Participating hosts (15 -> 15)
------------------------------

  No changes in participating hosts


Changes
-------

  No changes found


Build changes
-------------

  * Linux: xe-6110-e737af2078e34650a9cfea4622133eff88808dd5 -> xe-pw-178310v1

  IGT_9186: 9186
  xe-6110-e737af2078e34650a9cfea4622133eff88808dd5: e737af2078e34650a9cfea4622133eff88808dd5
  xe-pw-178310v1: 178310v1

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/index.html

[-- Attachment #2: Type: text/html, Size: 1402 bytes --]

^ permalink raw reply	[flat|nested] 20+ messages in thread

* ✓ Xe.CI.FULL: success for drm/i915/dpt: Optimize i915 DPT
  2026-11-11 11:19 [PATCH 00/13] drm/i915/dpt: Optimize i915 DPT Ville Syrjala
                   ` (15 preceding siblings ...)
  2026-11-11 13:05 ` ✓ Xe.CI.BAT: " Patchwork
@ 2026-11-11 20:29 ` Patchwork
  16 siblings, 0 replies; 20+ messages in thread
From: Patchwork @ 2026-11-11 20:29 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: intel-xe

[-- Attachment #1: Type: text/plain, Size: 40447 bytes --]

== Series Details ==

Series: drm/i915/dpt: Optimize i915 DPT
URL   : https://patchwork.freedesktop.org/series/178310/
State : success

== Summary ==

CI Bug Log - changes from xe-6110-e737af2078e34650a9cfea4622133eff88808dd5_FULL -> xe-pw-178310v1_FULL
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

Participating hosts (3 -> 3)
------------------------------

  No changes in participating hosts

Known issues
------------

  Here are the changes found in xe-pw-178310v1_FULL that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@kms_async_flips@alternate-sync-async-flip-atomic:
    - shard-bmg:          [PASS][1] -> [FAIL][2] ([Intel XE#3718] / [Intel XE#6078])
   [1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6110-e737af2078e34650a9cfea4622133eff88808dd5/shard-bmg-10/igt@kms_async_flips@alternate-sync-async-flip-atomic.html
   [2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-7/igt@kms_async_flips@alternate-sync-async-flip-atomic.html

  * igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-a-dp-1:
    - shard-bmg:          NOTRUN -> [FAIL][3] ([Intel XE#6078])
   [3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-7/igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-a-dp-1.html

  * igt@kms_atomic_transition@plane-all-modeset-transition-internal-panels:
    - shard-bmg:          NOTRUN -> [SKIP][4] ([Intel XE#2370])
   [4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-6/igt@kms_atomic_transition@plane-all-modeset-transition-internal-panels.html

  * igt@kms_big_fb@linear-max-hw-stride-64bpp-rotate-180-hflip:
    - shard-bmg:          NOTRUN -> [SKIP][5] ([Intel XE#7059] / [Intel XE#7085])
   [5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-6/igt@kms_big_fb@linear-max-hw-stride-64bpp-rotate-180-hflip.html

  * igt@kms_big_fb@x-tiled-16bpp-rotate-270:
    - shard-ptl:          NOTRUN -> [SKIP][6] ([Intel XE#5808]) +6 other tests skip
   [6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-2/igt@kms_big_fb@x-tiled-16bpp-rotate-270.html

  * igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0-hflip-async-flip:
    - shard-bmg:          NOTRUN -> [SKIP][7] ([Intel XE#1124]) +1 other test skip
   [7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-2/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0-hflip-async-flip.html

  * igt@kms_bw@connected-linear-tiling-3-displays-target-2160x1440p:
    - shard-ptl:          NOTRUN -> [SKIP][8] ([Intel XE#7679])
   [8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-6/igt@kms_bw@connected-linear-tiling-3-displays-target-2160x1440p.html

  * igt@kms_bw@connected-linear-tiling-3-displays-target-3840x2160p:
    - shard-bmg:          NOTRUN -> [SKIP][9] ([Intel XE#7679])
   [9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-6/igt@kms_bw@connected-linear-tiling-3-displays-target-3840x2160p.html

  * igt@kms_bw@linear-tiling-3-displays-target-3840x2160p:
    - shard-bmg:          NOTRUN -> [SKIP][10] ([Intel XE#367])
   [10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-6/igt@kms_bw@linear-tiling-3-displays-target-3840x2160p.html

  * igt@kms_bw@linear-tiling-4-displays-target-3840x2160p:
    - shard-ptl:          NOTRUN -> [SKIP][11] ([Intel XE#367])
   [11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-2/igt@kms_bw@linear-tiling-4-displays-target-3840x2160p.html

  * igt@kms_ccs@crc-primary-basic-4-tiled-mtl-mc-ccs:
    - shard-ptl:          NOTRUN -> [SKIP][12] ([Intel XE#5822]) +6 other tests skip
   [12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-2/igt@kms_ccs@crc-primary-basic-4-tiled-mtl-mc-ccs.html

  * igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs:
    - shard-bmg:          [PASS][13] -> [INCOMPLETE][14] ([Intel XE#7084] / [Intel XE#8150]) +1 other test incomplete
   [13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6110-e737af2078e34650a9cfea4622133eff88808dd5/shard-bmg-8/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs.html
   [14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-8/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs.html

  * igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-rc-ccs:
    - shard-bmg:          NOTRUN -> [SKIP][15] ([Intel XE#3432])
   [15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-6/igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-rc-ccs.html

  * igt@kms_ccs@crc-sprite-planes-basic-4-tiled-lnl-ccs@pipe-b-dp-2:
    - shard-bmg:          NOTRUN -> [SKIP][16] ([Intel XE#2652]) +3 other tests skip
   [16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-8/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-lnl-ccs@pipe-b-dp-2.html

  * igt@kms_ccs@missing-ccs-buffer-4-tiled-mtl-mc-ccs:
    - shard-bmg:          NOTRUN -> [SKIP][17] ([Intel XE#2887]) +3 other tests skip
   [17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-2/igt@kms_ccs@missing-ccs-buffer-4-tiled-mtl-mc-ccs.html

  * igt@kms_chamelium_audio@dp-audio-after-suspend:
    - shard-bmg:          NOTRUN -> [SKIP][18] ([Intel XE#2252]) +1 other test skip
   [18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-2/igt@kms_chamelium_audio@dp-audio-after-suspend.html

  * igt@kms_chamelium_color_pipeline@plane-fixed-matrix-yuv-rgb-bt709:
    - shard-ptl:          NOTRUN -> [SKIP][19] ([Intel XE#8391]) +1 other test skip
   [19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-2/igt@kms_chamelium_color_pipeline@plane-fixed-matrix-yuv-rgb-bt709.html

  * igt@kms_chamelium_color_pipeline@plane-fixed-matrix-yuv-rgb-bt709-lim:
    - shard-bmg:          NOTRUN -> [SKIP][20] ([Intel XE#7358])
   [20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-2/igt@kms_chamelium_color_pipeline@plane-fixed-matrix-yuv-rgb-bt709-lim.html

  * igt@kms_chamelium_edid@hdmi-edid-change-during-hibernate:
    - shard-ptl:          NOTRUN -> [SKIP][21] ([Intel XE#2252]) +2 other tests skip
   [21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-6/igt@kms_chamelium_edid@hdmi-edid-change-during-hibernate.html

  * igt@kms_color_pipeline@plane-lut1d-ctm3x4@pipe-a-plane-3:
    - shard-ptl:          NOTRUN -> [SKIP][22] ([Intel XE#6969]) +7 other tests skip
   [22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-2/igt@kms_color_pipeline@plane-lut1d-ctm3x4@pipe-a-plane-3.html

  * igt@kms_content_protection@atomic-dpms-hdcp14@pipe-a-dp-1:
    - shard-bmg:          NOTRUN -> [FAIL][23] ([Intel XE#3304])
   [23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-7/igt@kms_content_protection@atomic-dpms-hdcp14@pipe-a-dp-1.html

  * igt@kms_content_protection@legacy-hdcp14:
    - shard-ptl:          NOTRUN -> [SKIP][24] ([Intel XE#7642])
   [24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-2/igt@kms_content_protection@legacy-hdcp14.html

  * igt@kms_content_protection@legacy-hdcp14@pipe-a-dp-1:
    - shard-bmg:          NOTRUN -> [FAIL][25] ([Intel XE#3304] / [Intel XE#7374])
   [25]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-7/igt@kms_content_protection@legacy-hdcp14@pipe-a-dp-1.html

  * igt@kms_content_protection@lic-type-0-hdcp14@pipe-a-dp-2:
    - shard-bmg:          NOTRUN -> [FAIL][26] ([Intel XE#1178] / [Intel XE#3304] / [Intel XE#7374]) +3 other tests fail
   [26]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-8/igt@kms_content_protection@lic-type-0-hdcp14@pipe-a-dp-2.html

  * igt@kms_cursor_crc@cursor-offscreen-32x32:
    - shard-bmg:          NOTRUN -> [SKIP][27] ([Intel XE#2320])
   [27]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-2/igt@kms_cursor_crc@cursor-offscreen-32x32.html

  * igt@kms_cursor_crc@cursor-sliding-32x32:
    - shard-ptl:          NOTRUN -> [SKIP][28] ([Intel XE#5900]) +3 other tests skip
   [28]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-2/igt@kms_cursor_crc@cursor-sliding-32x32.html

  * igt@kms_cursor_legacy@2x-long-flip-vs-cursor-atomic:
    - shard-ptl:          NOTRUN -> [SKIP][29] ([Intel XE#5962])
   [29]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-6/igt@kms_cursor_legacy@2x-long-flip-vs-cursor-atomic.html

  * igt@kms_cursor_legacy@short-busy-flip-before-cursor-toggle:
    - shard-bmg:          NOTRUN -> [SKIP][30] ([Intel XE#2286] / [Intel XE#6035])
   [30]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-6/igt@kms_cursor_legacy@short-busy-flip-before-cursor-toggle.html

  * igt@kms_dp_link_training@non-uhbr-mst-direct-train:
    - shard-bmg:          NOTRUN -> [SKIP][31] ([Intel XE#9532])
   [31]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-2/igt@kms_dp_link_training@non-uhbr-mst-direct-train.html

  * igt@kms_dsc@dsc-with-bpc-formats-ultrajoiner:
    - shard-ptl:          NOTRUN -> [SKIP][32] ([Intel XE#5907]) +1 other test skip
   [32]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-6/igt@kms_dsc@dsc-with-bpc-formats-ultrajoiner.html

  * igt@kms_dsc@dsc-with-output-formats:
    - shard-bmg:          NOTRUN -> [SKIP][33] ([Intel XE#8265])
   [33]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-6/igt@kms_dsc@dsc-with-output-formats.html

  * igt@kms_feature_discovery@chamelium:
    - shard-ptl:          NOTRUN -> [SKIP][34] ([Intel XE#7359])
   [34]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-6/igt@kms_feature_discovery@chamelium.html

  * igt@kms_feature_discovery@vrr:
    - shard-bmg:          NOTRUN -> [SKIP][35] ([Intel XE#8586])
   [35]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-2/igt@kms_feature_discovery@vrr.html

  * igt@kms_flip@2x-nonexisting-fb:
    - shard-ptl:          NOTRUN -> [SKIP][36] ([Intel XE#2316]) +3 other tests skip
   [36]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-2/igt@kms_flip@2x-nonexisting-fb.html

  * igt@kms_flip@flip-vs-expired-vblank@c-edp1:
    - shard-lnl:          [PASS][37] -> [FAIL][38] ([Intel XE#301] / [Intel XE#3149]) +1 other test fail
   [37]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6110-e737af2078e34650a9cfea4622133eff88808dd5/shard-lnl-8/igt@kms_flip@flip-vs-expired-vblank@c-edp1.html
   [38]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-lnl-7/igt@kms_flip@flip-vs-expired-vblank@c-edp1.html

  * igt@kms_flip@flip-vs-suspend-interruptible:
    - shard-bmg:          [PASS][39] -> [INCOMPLETE][40] ([Intel XE#2597] / [Intel XE#8155]) +1 other test incomplete
   [39]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6110-e737af2078e34650a9cfea4622133eff88808dd5/shard-bmg-9/igt@kms_flip@flip-vs-suspend-interruptible.html
   [40]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-2/igt@kms_flip@flip-vs-suspend-interruptible.html

  * igt@kms_flip@plain-flip-ts-check@b-edp1:
    - shard-ptl:          [PASS][41] -> [FAIL][42] ([Intel XE#3098] / [Intel XE#9171]) +1 other test fail
   [41]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6110-e737af2078e34650a9cfea4622133eff88808dd5/shard-ptl-7/igt@kms_flip@plain-flip-ts-check@b-edp1.html
   [42]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-7/igt@kms_flip@plain-flip-ts-check@b-edp1.html

  * igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling:
    - shard-bmg:          NOTRUN -> [SKIP][43] ([Intel XE#7178] / [Intel XE#7351])
   [43]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-2/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling.html

  * igt@kms_flip_scaled_crc@flip-64bpp-xtile-to-16bpp-xtile-upscaling:
    - shard-ptl:          NOTRUN -> [SKIP][44] ([Intel XE#7178])
   [44]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-2/igt@kms_flip_scaled_crc@flip-64bpp-xtile-to-16bpp-xtile-upscaling.html

  * igt@kms_frontbuffer_tracking@drrs-1p-primscrn-cur-indfb-draw-mmap-wc:
    - shard-ptl:          NOTRUN -> [SKIP][45] ([Intel XE#5800] / [Intel XE#6312]) +4 other tests skip
   [45]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-2/igt@kms_frontbuffer_tracking@drrs-1p-primscrn-cur-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@drrshdr-1p-primscrn-indfb-pgflip-blt:
    - shard-ptl:          NOTRUN -> [SKIP][46] ([Intel XE#6312]) +8 other tests skip
   [46]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-6/igt@kms_frontbuffer_tracking@drrshdr-1p-primscrn-indfb-pgflip-blt.html

  * igt@kms_frontbuffer_tracking@drrshdr-1p-rte:
    - shard-bmg:          NOTRUN -> [SKIP][47] ([Intel XE#2311]) +19 other tests skip
   [47]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-2/igt@kms_frontbuffer_tracking@drrshdr-1p-rte.html

  * igt@kms_frontbuffer_tracking@drrshdr-argb161616f-draw-mmap-wc:
    - shard-bmg:          NOTRUN -> [SKIP][48] ([Intel XE#7061]) +1 other test skip
   [48]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-6/igt@kms_frontbuffer_tracking@drrshdr-argb161616f-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-indfb-msflip-blt:
    - shard-bmg:          NOTRUN -> [SKIP][49] ([Intel XE#4141]) +5 other tests skip
   [49]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-6/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-indfb-msflip-blt.html

  * igt@kms_frontbuffer_tracking@fbcdrrs-abgr161616f-draw-mmap-wc:
    - shard-ptl:          NOTRUN -> [SKIP][50] ([Intel XE#7061] / [Intel XE#7356]) +1 other test skip
   [50]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-2/igt@kms_frontbuffer_tracking@fbcdrrs-abgr161616f-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbchdr-abgr161616f-draw-render:
    - shard-ptl:          NOTRUN -> [SKIP][51] ([Intel XE#7061])
   [51]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-6/igt@kms_frontbuffer_tracking@fbchdr-abgr161616f-draw-render.html

  * igt@kms_frontbuffer_tracking@fbcpsr-abgr161616f-draw-render:
    - shard-bmg:          NOTRUN -> [SKIP][52] ([Intel XE#7061] / [Intel XE#7356])
   [52]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-6/igt@kms_frontbuffer_tracking@fbcpsr-abgr161616f-draw-render.html

  * igt@kms_frontbuffer_tracking@hdr-2p-primscrn-cur-indfb-draw-mmap-wc:
    - shard-ptl:          NOTRUN -> [SKIP][53] ([Intel XE#5812]) +37 other tests skip
   [53]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-2/igt@kms_frontbuffer_tracking@hdr-2p-primscrn-cur-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@hdr-rgb565-draw-blt:
    - shard-ptl:          NOTRUN -> [SKIP][54] ([Intel XE#7865]) +6 other tests skip
   [54]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-6/igt@kms_frontbuffer_tracking@hdr-rgb565-draw-blt.html

  * igt@kms_frontbuffer_tracking@psr-2p-primscrn-indfb-plflip-blt:
    - shard-bmg:          NOTRUN -> [SKIP][55] ([Intel XE#2313]) +19 other tests skip
   [55]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-6/igt@kms_frontbuffer_tracking@psr-2p-primscrn-indfb-plflip-blt.html

  * igt@kms_joiner@invalid-modeset-ultra-joiner:
    - shard-bmg:          NOTRUN -> [SKIP][56] ([Intel XE#6911] / [Intel XE#7378])
   [56]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-6/igt@kms_joiner@invalid-modeset-ultra-joiner.html

  * igt@kms_joiner@switch-modeset-ultra-joiner-big-joiner:
    - shard-ptl:          NOTRUN -> [SKIP][57] ([Intel XE#7173])
   [57]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-2/igt@kms_joiner@switch-modeset-ultra-joiner-big-joiner.html

  * igt@kms_plane@pixel-format-4-tiled-bmg-ccs-modifier-source-clamping:
    - shard-ptl:          NOTRUN -> [SKIP][58] ([Intel XE#7283]) +3 other tests skip
   [58]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-6/igt@kms_plane@pixel-format-4-tiled-bmg-ccs-modifier-source-clamping.html

  * igt@kms_plane_scaling@planes-downscale-factor-0-5@pipe-c:
    - shard-bmg:          NOTRUN -> [SKIP][59] ([Intel XE#2763] / [Intel XE#6886]) +4 other tests skip
   [59]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-6/igt@kms_plane_scaling@planes-downscale-factor-0-5@pipe-c.html

  * igt@kms_psr2_sf@fbc-pr-cursor-plane-move-continuous-exceed-fully-sf:
    - shard-bmg:          NOTRUN -> [SKIP][60] ([Intel XE#1489]) +1 other test skip
   [60]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-6/igt@kms_psr2_sf@fbc-pr-cursor-plane-move-continuous-exceed-fully-sf.html

  * igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-exceed-fully-sf@pipe-a-edp-1:
    - shard-ptl:          NOTRUN -> [SKIP][61] ([Intel XE#5858])
   [61]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-2/igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-exceed-fully-sf@pipe-a-edp-1.html

  * igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-exceed-fully-sf@pipe-b-edp-1:
    - shard-ptl:          NOTRUN -> [SKIP][62] ([Intel XE#5858] / [Intel XE#7304]) +1 other test skip
   [62]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-2/igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-exceed-fully-sf@pipe-b-edp-1.html

  * igt@kms_psr2_su@page_flip-xrgb8888:
    - shard-bmg:          NOTRUN -> [SKIP][63] ([Intel XE#2387] / [Intel XE#7429])
   [63]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-2/igt@kms_psr2_su@page_flip-xrgb8888.html

  * igt@kms_psr@fbc-pr-suspend:
    - shard-bmg:          NOTRUN -> [SKIP][64] ([Intel XE#2234] / [Intel XE#2850]) +5 other tests skip
   [64]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-6/igt@kms_psr@fbc-pr-suspend.html

  * igt@kms_psr@fbc-psr2-sprite-plane-move:
    - shard-ptl:          NOTRUN -> [SKIP][65] ([Intel XE#1406] / [Intel XE#5835]) +3 other tests skip
   [65]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-6/igt@kms_psr@fbc-psr2-sprite-plane-move.html

  * igt@kms_psr@pr-dpms:
    - shard-ptl:          NOTRUN -> [SKIP][66] ([Intel XE#1406]) +2 other tests skip
   [66]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-2/igt@kms_psr@pr-dpms.html

  * igt@kms_rotation_crc@bad-tiling:
    - shard-bmg:          NOTRUN -> [SKIP][67] ([Intel XE#3904] / [Intel XE#7342])
   [67]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-2/igt@kms_rotation_crc@bad-tiling.html

  * igt@kms_rotation_crc@primary-rotation-90:
    - shard-ptl:          NOTRUN -> [SKIP][68] ([Intel XE#5821])
   [68]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-2/igt@kms_rotation_crc@primary-rotation-90.html

  * igt@kms_rotation_crc@primary-y-tiled-reflect-x-0:
    - shard-ptl:          NOTRUN -> [SKIP][69] ([Intel XE#5813])
   [69]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-6/igt@kms_rotation_crc@primary-y-tiled-reflect-x-0.html

  * igt@kms_rotation_crc@primary-y-tiled-reflect-x-180:
    - shard-bmg:          NOTRUN -> [SKIP][70] ([Intel XE#2330] / [Intel XE#5813])
   [70]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-6/igt@kms_rotation_crc@primary-y-tiled-reflect-x-180.html

  * igt@kms_sharpness_filter@filter-suspend:
    - shard-bmg:          NOTRUN -> [SKIP][71] ([Intel XE#6503])
   [71]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-2/igt@kms_sharpness_filter@filter-suspend.html

  * igt@kms_vrr@flip-suspend@pipe-a-edp-1:
    - shard-ptl:          [PASS][72] -> [FAIL][73] ([Intel XE#4227] / [Intel XE#7397]) +1 other test fail
   [72]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6110-e737af2078e34650a9cfea4622133eff88808dd5/shard-ptl-8/igt@kms_vrr@flip-suspend@pipe-a-edp-1.html
   [73]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-8/igt@kms_vrr@flip-suspend@pipe-a-edp-1.html

  * igt@sriov_basic@pf-unbind-with-vfs-enabled-numvfs-all:
    - shard-ptl:          NOTRUN -> [ABORT][74] ([Intel XE#8868])
   [74]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-6/igt@sriov_basic@pf-unbind-with-vfs-enabled-numvfs-all.html

  * igt@xe_compute@ccs-mode-basic:
    - shard-bmg:          NOTRUN -> [SKIP][75] ([Intel XE#6599])
   [75]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-2/igt@xe_compute@ccs-mode-basic.html

  * igt@xe_cw_post_sync@walker-post-sync:
    - shard-ptl:          NOTRUN -> [SKIP][76] ([Intel XE#8608])
   [76]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-2/igt@xe_cw_post_sync@walker-post-sync.html

  * igt@xe_evict@evict-small-multi-queue:
    - shard-bmg:          NOTRUN -> [SKIP][77] ([Intel XE#8370])
   [77]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-2/igt@xe_evict@evict-small-multi-queue.html

  * igt@xe_evict@evict-small-multi-queue-cm:
    - shard-ptl:          NOTRUN -> [SKIP][78] ([Intel XE#5764]) +4 other tests skip
   [78]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-6/igt@xe_evict@evict-small-multi-queue-cm.html

  * igt@xe_exec_balancer@twice-cm-virtual-userptr-rebind:
    - shard-ptl:          NOTRUN -> [SKIP][79] ([Intel XE#7482]) +5 other tests skip
   [79]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-2/igt@xe_exec_balancer@twice-cm-virtual-userptr-rebind.html

  * igt@xe_exec_basic@multigpu-many-execqueues-many-vm-bindexecqueue-userptr:
    - shard-ptl:          NOTRUN -> [SKIP][80] ([Intel XE#5575] / [Intel XE#7484]) +3 other tests skip
   [80]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-6/igt@xe_exec_basic@multigpu-many-execqueues-many-vm-bindexecqueue-userptr.html

  * igt@xe_exec_basic@multigpu-many-execqueues-many-vm-userptr-rebind:
    - shard-bmg:          NOTRUN -> [SKIP][81] ([Intel XE#2322] / [Intel XE#7372]) +1 other test skip
   [81]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-2/igt@xe_exec_basic@multigpu-many-execqueues-many-vm-userptr-rebind.html

  * igt@xe_exec_fault_mode@many-execqueues-multi-queue-prefetch:
    - shard-ptl:          NOTRUN -> [SKIP][82] ([Intel XE#8374]) +4 other tests skip
   [82]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-2/igt@xe_exec_fault_mode@many-execqueues-multi-queue-prefetch.html

  * igt@xe_exec_fault_mode@once-multi-queue-userptr-invalidate-race-imm:
    - shard-bmg:          NOTRUN -> [SKIP][83] ([Intel XE#8374]) +5 other tests skip
   [83]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-6/igt@xe_exec_fault_mode@once-multi-queue-userptr-invalidate-race-imm.html

  * igt@xe_exec_multi_queue@two-queues-preempt-mode-fault-dyn-priority-smem:
    - shard-bmg:          NOTRUN -> [SKIP][84] ([Intel XE#8364]) +7 other tests skip
   [84]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-6/igt@xe_exec_multi_queue@two-queues-preempt-mode-fault-dyn-priority-smem.html

  * igt@xe_exec_multi_queue@two-queues-preempt-mode-fault-userptr-invalidate:
    - shard-ptl:          NOTRUN -> [SKIP][85] ([Intel XE#8364]) +11 other tests skip
   [85]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-2/igt@xe_exec_multi_queue@two-queues-preempt-mode-fault-userptr-invalidate.html

  * igt@xe_exec_reset@multi-queue-cat-error-on-secondary:
    - shard-ptl:          NOTRUN -> [SKIP][86] ([Intel XE#8369])
   [86]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-6/igt@xe_exec_reset@multi-queue-cat-error-on-secondary.html

  * igt@xe_exec_threads@threads-multi-queue-fd-userptr-invalidate:
    - shard-ptl:          NOTRUN -> [SKIP][87] ([Intel XE#8378]) +3 other tests skip
   [87]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-2/igt@xe_exec_threads@threads-multi-queue-fd-userptr-invalidate.html

  * igt@xe_exec_threads@threads-multi-queue-mixed-userptr-invalidate-race:
    - shard-bmg:          NOTRUN -> [SKIP][88] ([Intel XE#8378]) +4 other tests skip
   [88]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-2/igt@xe_exec_threads@threads-multi-queue-mixed-userptr-invalidate-race.html

  * igt@xe_multigpu_svm@mgpu-coherency-prefetch:
    - shard-bmg:          NOTRUN -> [SKIP][89] ([Intel XE#6964]) +1 other test skip
   [89]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-6/igt@xe_multigpu_svm@mgpu-coherency-prefetch.html

  * igt@xe_multigpu_svm@mgpu-migration-basic:
    - shard-ptl:          NOTRUN -> [SKIP][90] ([Intel XE#6964])
   [90]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-2/igt@xe_multigpu_svm@mgpu-migration-basic.html

  * igt@xe_oa@oa-tlb-invalidate:
    - shard-bmg:          NOTRUN -> [SKIP][91] ([Intel XE#2248] / [Intel XE#7325] / [Intel XE#7393])
   [91]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-2/igt@xe_oa@oa-tlb-invalidate.html

  * igt@xe_page_reclaim@binds-null-vma:
    - shard-bmg:          NOTRUN -> [SKIP][92] ([Intel XE#7793])
   [92]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-2/igt@xe_page_reclaim@binds-null-vma.html

  * igt@xe_page_reclaim@pde-vs-pd:
    - shard-ptl:          NOTRUN -> [SKIP][93] ([Intel XE#7793])
   [93]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-2/igt@xe_page_reclaim@pde-vs-pd.html

  * igt@xe_pat@l2-flush-opt-svm-pat-restrict:
    - shard-ptl:          NOTRUN -> [SKIP][94] ([Intel XE#7590])
   [94]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-6/igt@xe_pat@l2-flush-opt-svm-pat-restrict.html

  * igt@xe_peer2peer@write:
    - shard-ptl:          NOTRUN -> [SKIP][95] ([Intel XE#6588])
   [95]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-2/igt@xe_peer2peer@write.html

  * igt@xe_pm@d3cold-basic-exec:
    - shard-ptl:          NOTRUN -> [SKIP][96] ([Intel XE#5741]) +1 other test skip
   [96]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-6/igt@xe_pm@d3cold-basic-exec.html

  * igt@xe_pm@s4-basic-exec:
    - shard-lnl:          [PASS][97] -> [DMESG-WARN][98] ([Intel XE#7727])
   [97]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6110-e737af2078e34650a9cfea4622133eff88808dd5/shard-lnl-2/igt@xe_pm@s4-basic-exec.html
   [98]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-lnl-4/igt@xe_pm@s4-basic-exec.html

  * igt@xe_pm@s4-vm-bind-userptr:
    - shard-ptl:          [PASS][99] -> [ABORT][100] ([Intel XE#9362])
   [99]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6110-e737af2078e34650a9cfea4622133eff88808dd5/shard-ptl-4/igt@xe_pm@s4-vm-bind-userptr.html
   [100]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-4/igt@xe_pm@s4-vm-bind-userptr.html

  * igt@xe_pm_residency@gt-c6-freeze@gt0:
    - shard-bmg:          [PASS][101] -> [FAIL][102] ([Intel XE#9254])
   [101]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6110-e737af2078e34650a9cfea4622133eff88808dd5/shard-bmg-9/igt@xe_pm_residency@gt-c6-freeze@gt0.html
   [102]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-1/igt@xe_pm_residency@gt-c6-freeze@gt0.html

  * igt@xe_prefetch_fault@prefetch-fault:
    - shard-ptl:          NOTRUN -> [SKIP][103] ([Intel XE#7599])
   [103]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-2/igt@xe_prefetch_fault@prefetch-fault.html

  * igt@xe_query@multigpu-query-invalid-cs-cycles:
    - shard-bmg:          NOTRUN -> [SKIP][104] ([Intel XE#944]) +1 other test skip
   [104]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-2/igt@xe_query@multigpu-query-invalid-cs-cycles.html

  * igt@xe_sriov_vram@vf-access-beyond:
    - shard-ptl:          NOTRUN -> [SKIP][105] ([Intel XE#6376] / [Intel XE#7422])
   [105]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-6/igt@xe_sriov_vram@vf-access-beyond.html

  * igt@xe_wedged@wedged-at-any-timeout:
    - shard-ptl:          NOTRUN -> [DMESG-WARN][106] ([Intel XE#8963])
   [106]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-2/igt@xe_wedged@wedged-at-any-timeout.html

  
#### Possible fixes ####

  * igt@kms_bw@linear-tiling-1-displays-target-3840x2160p:
    - shard-bmg:          [SKIP][107] ([Intel XE#367]) -> [PASS][108]
   [107]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6110-e737af2078e34650a9cfea4622133eff88808dd5/shard-bmg-10/igt@kms_bw@linear-tiling-1-displays-target-3840x2160p.html
   [108]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-7/igt@kms_bw@linear-tiling-1-displays-target-3840x2160p.html

  * igt@kms_flip@flip-vs-expired-vblank-interruptible:
    - shard-lnl:          [FAIL][109] ([Intel XE#301]) -> [PASS][110] +1 other test pass
   [109]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6110-e737af2078e34650a9cfea4622133eff88808dd5/shard-lnl-1/igt@kms_flip@flip-vs-expired-vblank-interruptible.html
   [110]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-lnl-4/igt@kms_flip@flip-vs-expired-vblank-interruptible.html

  * igt@xe_fault_injection@inject-fault-probe-function-xe_guc_ads_init:
    - shard-bmg:          [ABORT][111] ([Intel XE#9463]) -> [PASS][112]
   [111]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6110-e737af2078e34650a9cfea4622133eff88808dd5/shard-bmg-4/igt@xe_fault_injection@inject-fault-probe-function-xe_guc_ads_init.html
   [112]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-6/igt@xe_fault_injection@inject-fault-probe-function-xe_guc_ads_init.html

  * igt@xe_pm@d3hot-basic-exec:
    - shard-bmg:          [INCOMPLETE][113] -> [PASS][114]
   [113]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6110-e737af2078e34650a9cfea4622133eff88808dd5/shard-bmg-3/igt@xe_pm@d3hot-basic-exec.html
   [114]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-2/igt@xe_pm@d3hot-basic-exec.html

  * igt@xe_pm@s2idle-basic:
    - shard-ptl:          [ABORT][115] ([Intel XE#9362]) -> [PASS][116] +2 other tests pass
   [115]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6110-e737af2078e34650a9cfea4622133eff88808dd5/shard-ptl-6/igt@xe_pm@s2idle-basic.html
   [116]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-6/igt@xe_pm@s2idle-basic.html

  * igt@xe_pm@s4-basic-exec:
    - shard-ptl:          [DMESG-WARN][117] ([Intel XE#9391]) -> [PASS][118]
   [117]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6110-e737af2078e34650a9cfea4622133eff88808dd5/shard-ptl-6/igt@xe_pm@s4-basic-exec.html
   [118]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-ptl-6/igt@xe_pm@s4-basic-exec.html

  * igt@xe_pm_residency@gt-c6-freeze@gt1:
    - shard-bmg:          [FAIL][119] ([Intel XE#9254]) -> [PASS][120]
   [119]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6110-e737af2078e34650a9cfea4622133eff88808dd5/shard-bmg-9/igt@xe_pm_residency@gt-c6-freeze@gt1.html
   [120]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-1/igt@xe_pm_residency@gt-c6-freeze@gt1.html

  
#### Warnings ####

  * igt@xe_pm@s4-multiple-execs:
    - shard-lnl:          [DMESG-WARN][121] ([Intel XE#7727]) -> [ABORT][122] ([Intel XE#9362])
   [121]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6110-e737af2078e34650a9cfea4622133eff88808dd5/shard-lnl-5/igt@xe_pm@s4-multiple-execs.html
   [122]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-lnl-5/igt@xe_pm@s4-multiple-execs.html

  * igt@xe_survivability@runtime-survivability:
    - shard-bmg:          [DMESG-WARN][123] -> [DMESG-WARN][124] ([Intel XE#9365])
   [123]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6110-e737af2078e34650a9cfea4622133eff88808dd5/shard-bmg-7/igt@xe_survivability@runtime-survivability.html
   [124]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/shard-bmg-8/igt@xe_survivability@runtime-survivability.html

  
  [Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
  [Intel XE#1178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1178
  [Intel XE#1406]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1406
  [Intel XE#1489]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1489
  [Intel XE#2234]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2234
  [Intel XE#2248]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2248
  [Intel XE#2252]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2252
  [Intel XE#2286]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2286
  [Intel XE#2311]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2311
  [Intel XE#2313]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2313
  [Intel XE#2316]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2316
  [Intel XE#2320]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2320
  [Intel XE#2322]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2322
  [Intel XE#2330]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2330
  [Intel XE#2370]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2370
  [Intel XE#2387]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2387
  [Intel XE#2597]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2597
  [Intel XE#2652]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2652
  [Intel XE#2763]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2763
  [Intel XE#2850]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2850
  [Intel XE#2887]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2887
  [Intel XE#301]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/301
  [Intel XE#3098]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3098
  [Intel XE#3149]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3149
  [Intel XE#3304]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3304
  [Intel XE#3432]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3432
  [Intel XE#367]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/367
  [Intel XE#3718]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3718
  [Intel XE#3904]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3904
  [Intel XE#4141]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4141
  [Intel XE#4227]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4227
  [Intel XE#5575]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5575
  [Intel XE#5741]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5741
  [Intel XE#5764]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5764
  [Intel XE#5800]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5800
  [Intel XE#5808]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5808
  [Intel XE#5812]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5812
  [Intel XE#5813]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5813
  [Intel XE#5821]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5821
  [Intel XE#5822]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5822
  [Intel XE#5835]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5835
  [Intel XE#5858]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5858
  [Intel XE#5900]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5900
  [Intel XE#5907]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5907
  [Intel XE#5962]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5962
  [Intel XE#6035]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6035
  [Intel XE#6078]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6078
  [Intel XE#6312]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6312
  [Intel XE#6376]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6376
  [Intel XE#6503]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6503
  [Intel XE#6588]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6588
  [Intel XE#6599]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6599
  [Intel XE#6886]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6886
  [Intel XE#6911]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6911
  [Intel XE#6964]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6964
  [Intel XE#6969]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6969
  [Intel XE#7059]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7059
  [Intel XE#7061]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7061
  [Intel XE#7084]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7084
  [Intel XE#7085]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7085
  [Intel XE#7173]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7173
  [Intel XE#7178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7178
  [Intel XE#7283]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7283
  [Intel XE#7304]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7304
  [Intel XE#7325]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7325
  [Intel XE#7342]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7342
  [Intel XE#7351]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7351
  [Intel XE#7356]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7356
  [Intel XE#7358]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7358
  [Intel XE#7359]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7359
  [Intel XE#7372]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7372
  [Intel XE#7374]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7374
  [Intel XE#7378]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7378
  [Intel XE#7393]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7393
  [Intel XE#7397]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7397
  [Intel XE#7422]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7422
  [Intel XE#7429]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7429
  [Intel XE#7482]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7482
  [Intel XE#7484]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7484
  [Intel XE#7590]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7590
  [Intel XE#7599]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7599
  [Intel XE#7642]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7642
  [Intel XE#7679]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7679
  [Intel XE#7727]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7727
  [Intel XE#7793]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7793
  [Intel XE#7865]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7865
  [Intel XE#8150]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8150
  [Intel XE#8155]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8155
  [Intel XE#8265]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8265
  [Intel XE#8364]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8364
  [Intel XE#8369]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8369
  [Intel XE#8370]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8370
  [Intel XE#8374]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8374
  [Intel XE#8378]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8378
  [Intel XE#8391]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8391
  [Intel XE#8586]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8586
  [Intel XE#8608]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8608
  [Intel XE#8868]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8868
  [Intel XE#8963]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8963
  [Intel XE#9171]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9171
  [Intel XE#9254]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9254
  [Intel XE#9362]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9362
  [Intel XE#9365]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9365
  [Intel XE#9391]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9391
  [Intel XE#944]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/944
  [Intel XE#9463]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9463
  [Intel XE#9532]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9532


Build changes
-------------

  * Linux: xe-6110-e737af2078e34650a9cfea4622133eff88808dd5 -> xe-pw-178310v1

  IGT_9186: 9186
  xe-6110-e737af2078e34650a9cfea4622133eff88808dd5: e737af2078e34650a9cfea4622133eff88808dd5
  xe-pw-178310v1: 178310v1

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178310v1/index.html

[-- Attachment #2: Type: text/html, Size: 45146 bytes --]

^ permalink raw reply	[flat|nested] 20+ messages in thread

end of thread, other threads:[~2026-11-11 20:29 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-11-11 11:19 [PATCH 00/13] drm/i915/dpt: Optimize i915 DPT Ville Syrjala
2026-11-11 11:19 ` [PATCH 01/13] drm/i915: Bump surface alignment to 32k on MTL for async flips Ville Syrjala
2026-11-11 11:19 ` [PATCH 02/13] drm/i915/fb: Fix error handling onion in intel_framebuffer_init() Ville Syrjala
2026-11-11 11:19 ` [PATCH 03/13] drm/i915/dpt: Stop allocation DPTs from stolen Ville Syrjala
2026-11-11 11:19 ` [PATCH 04/13] drm/i915/fb_pin: Remove overzealous vma NULL checks Ville Syrjala
2026-11-11 11:19 ` [PATCH 05/13] drm/i915: intel_{remapped, rotation}_info_size() into intel/gtt_view_types.h Ville Syrjala
2026-11-11 11:20 ` [PATCH 06/13] drm/i915/dpt: Compute DPT size in the DPT code Ville Syrjala
2026-11-11 11:31   ` sashiko-bot
2026-11-11 12:39     ` Ville Syrjälä
2026-11-11 11:20 ` [PATCH 07/13] drm/i915/vma: Extract intel_gtt_view_compare() Ville Syrjala
2026-11-11 11:20 ` [PATCH 08/13] drm/i915/vma: Introduce i915_vma_lookup() Ville Syrjala
2026-11-11 11:20 ` [PATCH 09/13] drm/i915/dpt: Make i915_dpt_{suspend, resume}() internal to i915 Ville Syrjala
2026-11-11 11:20 ` [PATCH 10/13] drm/i915/dpt: Cache DPTs in the gem object Ville Syrjala
2026-11-11 11:20 ` [PATCH 11/13] drm/i915/dpt: Hide the DPT even more from the display code Ville Syrjala
2026-11-11 11:20 ` [PATCH 12/13] drm/i915/dpt: Remove dpt->vma Ville Syrjala
2026-11-11 11:20 ` [PATCH 13/13] drm/i915/dpt: s/struct intel_dpt/struct i915_dpt/ Ville Syrjala
2026-11-11 12:28 ` ✗ CI.checkpatch: warning for drm/i915/dpt: Optimize i915 DPT Patchwork
2026-11-11 12:30 ` ✓ CI.KUnit: success " Patchwork
2026-11-11 13:05 ` ✓ Xe.CI.BAT: " Patchwork
2026-11-11 20:29 ` ✓ Xe.CI.FULL: " Patchwork

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox