Intel-GFX Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/6] drm/{ttm,xe}: Improve ttm_bo_vmap() and update xe
@ 2024-06-14 13:21 Thomas Zimmermann
  2024-06-14 13:21 ` [PATCH 1/6] iosys-map: Add allocator flags Thomas Zimmermann
                   ` (9 more replies)
  0 siblings, 10 replies; 16+ messages in thread
From: Thomas Zimmermann @ 2024-06-14 13:21 UTC (permalink / raw)
  To: maarten.lankhorst, mripard, airlied, daniel, lucas.demarchi,
	rodrigo.vivi, jani.nikula, ray.huang, christian.koenig, kraxel,
	airlied, suijingfeng
  Cc: dri-devel, intel-xe, intel-gfx, Thomas Zimmermann

Add ttm_bo_kmap()'s features to ttm_bo_vmap() and convert xe to
use the latter helper. ttm_bo_vmap() returns mappings in an instance
of struct iosys_map, which simplifies driver code in several places.

Patches 1 and 2 allow ttm_bo_vmap() to store the method of allocation
in the iosys_map instance. This simplifies the unmap and driver code.

Patch 3 adds support for partial mappings to ttm_bo_vmap(). That's
another feature of ttm_bo_kmap(). It is now possible to map only a
subrange of a buffer object's memory buffer. This requires a trivial
change to existing callers, so that they still map the full buffer
range.

Patch 4 adds support for kmap()-based mappings in certain cases to
ttm_bo_vmap().

Patches 5 and 6 convert xe to ttm_bo_vmap(). ttm_bo_vmap() tests if
the caller holds the object's reservation lock; and therefore cannot
be called while relasing the buffer object. Patch 5 resolves this
problem in xe. Patch 6 then replaces ttm_bo_kmap() with ttm_bo_vmap()
and also updates the callers to use struct iosys_map everywhere.

Tested on Intel ARC hardware.

Future direction: DRM's TTM-based drivers use a mixture of ttm_bo_kmap()
and ttm_bo_vmap(). After merging these updates for ttm_bo_vmap(), the
other drivers can be converted and ttm_bo_kmap() can be removed.

Thomas Zimmermann (6):
  iosys-map: Add allocator flags
  drm/ttm: Store the bo_kmap_type in struct iosys_map
  drm/ttm: Support partial buffer mappings for ttm_bo_vmap()
  drm/ttm: Support kmap for single-page mappings in ttm_bo_vmap()
  drm/xe: Remove vunmap calls object-freeing code
  drm/xe: Replace ttm_bo_kmap() with ttm_bo_vmap()

 drivers/gpu/drm/drm_gem_ttm_helper.c          |  2 +-
 drivers/gpu/drm/drm_gem_vram_helper.c         |  2 +-
 drivers/gpu/drm/loongson/lsdc_gem.c           |  2 +-
 drivers/gpu/drm/qxl/qxl_object.c              |  2 +-
 drivers/gpu/drm/ttm/ttm_bo_util.c             | 94 +++++++++++++------
 .../compat-i915-headers/gem/i915_gem_object.h | 17 +---
 drivers/gpu/drm/xe/display/intel_fb_bo.c      | 12 ++-
 drivers/gpu/drm/xe/xe_bo.c                    | 46 ++++-----
 drivers/gpu/drm/xe/xe_bo.h                    | 23 ++---
 drivers/gpu/drm/xe/xe_bo_types.h              |  2 -
 drivers/gpu/drm/xe/xe_lrc.c                   |  3 +-
 drivers/gpu/drm/xe/xe_vm.c                    |  2 +-
 include/drm/ttm/ttm_bo.h                      |  4 +-
 include/linux/iosys-map.h                     | 13 ++-
 14 files changed, 131 insertions(+), 93 deletions(-)

-- 
2.45.2


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

* [PATCH 1/6] iosys-map: Add allocator flags
  2024-06-14 13:21 [PATCH 0/6] drm/{ttm,xe}: Improve ttm_bo_vmap() and update xe Thomas Zimmermann
@ 2024-06-14 13:21 ` Thomas Zimmermann
  2024-06-14 13:21 ` [PATCH 2/6] drm/ttm: Store the bo_kmap_type in struct iosys_map Thomas Zimmermann
                   ` (8 subsequent siblings)
  9 siblings, 0 replies; 16+ messages in thread
From: Thomas Zimmermann @ 2024-06-14 13:21 UTC (permalink / raw)
  To: maarten.lankhorst, mripard, airlied, daniel, lucas.demarchi,
	rodrigo.vivi, jani.nikula, ray.huang, christian.koenig, kraxel,
	airlied, suijingfeng
  Cc: dri-devel, intel-xe, intel-gfx, Thomas Zimmermann

Add the public field alloc_flags to struct iosys_map. It allows for
the allocator of the mapping to store additional flags, such details
about the internal alloctor operations. This will be helpful with
DRM's TTM memory manager, which supports various types of memory in
it's vmap functions.

The new field fills existing padding bytes in struct iosys_map, so
instances of the type do not grow in size.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
 include/linux/iosys-map.h | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/include/linux/iosys-map.h b/include/linux/iosys-map.h
index 4696abfd311cc..f3b351094bca0 100644
--- a/include/linux/iosys-map.h
+++ b/include/linux/iosys-map.h
@@ -97,6 +97,11 @@
  *
  *	iosys_map_memcpy_to(&map, src, len);
  *	iosys_map_incr(&map, len); // go to first byte after the memcpy
+ *
+ * The only public field in :c:type:`struct iosys_map <iosys_map>` is
+ * alloc_flags. It allows allocators to store additional information about the
+ * stored memory. Helpers will initialize or clear it to zero, but the values
+ * are only used by the allocator.
  */
 
 /**
@@ -105,6 +110,7 @@
  * @vaddr:		The buffer's address if in system memory
  * @is_iomem:		True if the buffer is located in I/O memory, or false
  *			otherwise.
+ * @alloc_flags		Allocator private flags
  */
 struct iosys_map {
 	union {
@@ -112,6 +118,7 @@ struct iosys_map {
 		void *vaddr;
 	};
 	bool is_iomem;
+	u16 alloc_flags;
 };
 
 /**
@@ -122,6 +129,7 @@ struct iosys_map {
 	{				\
 		.vaddr = (vaddr_),	\
 		.is_iomem = false,	\
+		.alloc_flags = 0,	\
 	}
 
 /**
@@ -132,6 +140,7 @@ struct iosys_map {
 	{						\
 		.vaddr_iomem = (vaddr_iomem_),		\
 		.is_iomem = true,			\
+		.alloc_flags = 0,			\
 	}
 
 /**
@@ -260,7 +269,8 @@ static inline bool iosys_map_is_set(const struct iosys_map *map)
  *
  * Clears all fields to zero, including struct iosys_map.is_iomem, so
  * mapping structures that were set to point to I/O memory are reset for
- * system memory. Pointers are cleared to NULL. This is the default.
+ * system memory. Pointers are cleared to NULL. The allocator flags in
+ * struct iosys_map.alloc_flags are cleared to zero.
  */
 static inline void iosys_map_clear(struct iosys_map *map)
 {
@@ -270,6 +280,7 @@ static inline void iosys_map_clear(struct iosys_map *map)
 	} else {
 		map->vaddr = NULL;
 	}
+	map->alloc_flags = 0;
 }
 
 /**
-- 
2.45.2


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

* [PATCH 2/6] drm/ttm: Store the bo_kmap_type in struct iosys_map
  2024-06-14 13:21 [PATCH 0/6] drm/{ttm,xe}: Improve ttm_bo_vmap() and update xe Thomas Zimmermann
  2024-06-14 13:21 ` [PATCH 1/6] iosys-map: Add allocator flags Thomas Zimmermann
@ 2024-06-14 13:21 ` Thomas Zimmermann
  2024-06-14 14:31   ` Christian König
  2024-06-14 13:21 ` [PATCH 3/6] drm/ttm: Support partial buffer mappings for ttm_bo_vmap() Thomas Zimmermann
                   ` (7 subsequent siblings)
  9 siblings, 1 reply; 16+ messages in thread
From: Thomas Zimmermann @ 2024-06-14 13:21 UTC (permalink / raw)
  To: maarten.lankhorst, mripard, airlied, daniel, lucas.demarchi,
	rodrigo.vivi, jani.nikula, ray.huang, christian.koenig, kraxel,
	airlied, suijingfeng
  Cc: dri-devel, intel-xe, intel-gfx, Thomas Zimmermann

For each instances of struct iosys_map set up by ttm_bo_vmap(), store
the type of allocation in the instance. Use this information to unmap
the memory in ttm_bo_vunmap(). This change simplifies the unmap code
and puts the complicated logic entirely into the map code.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
 drivers/gpu/drm/ttm/ttm_bo_util.c | 46 +++++++++++++++++++++----------
 1 file changed, 31 insertions(+), 15 deletions(-)

diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c b/drivers/gpu/drm/ttm/ttm_bo_util.c
index 0b3f4267130c4..a9df0deff2deb 100644
--- a/drivers/gpu/drm/ttm/ttm_bo_util.c
+++ b/drivers/gpu/drm/ttm/ttm_bo_util.c
@@ -36,6 +36,7 @@
 #include <drm/ttm/ttm_tt.h>
 
 #include <drm/drm_cache.h>
+#include <drm/drm_device.h>
 
 struct ttm_transfer_obj {
 	struct ttm_buffer_object base;
@@ -479,24 +480,29 @@ int ttm_bo_vmap(struct ttm_buffer_object *bo, struct iosys_map *map)
 
 	if (mem->bus.is_iomem) {
 		void __iomem *vaddr_iomem;
+		u16 alloc_flags;
 
-		if (mem->bus.addr)
+		if (mem->bus.addr) {
 			vaddr_iomem = (void __iomem *)mem->bus.addr;
-		else if (mem->bus.caching == ttm_write_combined)
-			vaddr_iomem = ioremap_wc(mem->bus.offset,
-						 bo->base.size);
+			alloc_flags = ttm_bo_map_premapped;
+		} else if (mem->bus.caching == ttm_write_combined) {
+			vaddr_iomem = ioremap_wc(mem->bus.offset, bo->base.size);
+			alloc_flags = ttm_bo_map_iomap;
 #ifdef CONFIG_X86
-		else if (mem->bus.caching == ttm_cached)
-			vaddr_iomem = ioremap_cache(mem->bus.offset,
-						  bo->base.size);
+		} else if (mem->bus.caching == ttm_cached) {
+			vaddr_iomem = ioremap_cache(mem->bus.offset, bo->base.size);
+			alloc_flags = ttm_bo_map_iomap;
 #endif
-		else
+		} else {
 			vaddr_iomem = ioremap(mem->bus.offset, bo->base.size);
+			alloc_flags = ttm_bo_map_iomap;
+		}
 
 		if (!vaddr_iomem)
 			return -ENOMEM;
 
 		iosys_map_set_vaddr_iomem(map, vaddr_iomem);
+		map->alloc_flags = alloc_flags;
 
 	} else {
 		struct ttm_operation_ctx ctx = {
@@ -506,6 +512,7 @@ int ttm_bo_vmap(struct ttm_buffer_object *bo, struct iosys_map *map)
 		struct ttm_tt *ttm = bo->ttm;
 		pgprot_t prot;
 		void *vaddr;
+		u16 alloc_flags;
 
 		ret = ttm_tt_populate(bo->bdev, ttm, &ctx);
 		if (ret)
@@ -519,8 +526,10 @@ int ttm_bo_vmap(struct ttm_buffer_object *bo, struct iosys_map *map)
 		vaddr = vmap(ttm->pages, ttm->num_pages, 0, prot);
 		if (!vaddr)
 			return -ENOMEM;
+		alloc_flags = ttm_bo_map_vmap;
 
 		iosys_map_set_vaddr(map, vaddr);
+		map->alloc_flags = alloc_flags;
 	}
 
 	return 0;
@@ -537,20 +546,27 @@ EXPORT_SYMBOL(ttm_bo_vmap);
  */
 void ttm_bo_vunmap(struct ttm_buffer_object *bo, struct iosys_map *map)
 {
-	struct ttm_resource *mem = bo->resource;
-
 	dma_resv_assert_held(bo->base.resv);
 
 	if (iosys_map_is_null(map))
 		return;
 
-	if (!map->is_iomem)
-		vunmap(map->vaddr);
-	else if (!mem->bus.addr)
+	switch (map->alloc_flags) {
+	case ttm_bo_map_iomap:
 		iounmap(map->vaddr_iomem);
-	iosys_map_clear(map);
-
+		break;
+	case ttm_bo_map_vmap:
+		vunmap(map->vaddr);
+		break;
+	case ttm_bo_map_premapped:
+		break;
+	default:
+		drm_err(bo->base.dev, "Unsupported alloc_flags 0x%x\n", map->alloc_flags);
+		return;
+	}
 	ttm_mem_io_free(bo->bdev, bo->resource);
+
+	iosys_map_clear(map);
 }
 EXPORT_SYMBOL(ttm_bo_vunmap);
 
-- 
2.45.2


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

* [PATCH 3/6] drm/ttm: Support partial buffer mappings for ttm_bo_vmap()
  2024-06-14 13:21 [PATCH 0/6] drm/{ttm,xe}: Improve ttm_bo_vmap() and update xe Thomas Zimmermann
  2024-06-14 13:21 ` [PATCH 1/6] iosys-map: Add allocator flags Thomas Zimmermann
  2024-06-14 13:21 ` [PATCH 2/6] drm/ttm: Store the bo_kmap_type in struct iosys_map Thomas Zimmermann
@ 2024-06-14 13:21 ` Thomas Zimmermann
  2024-06-14 14:33   ` Christian König
  2024-06-14 13:21 ` [PATCH 4/6] drm/ttm: Support kmap for single-page mappings in ttm_bo_vmap() Thomas Zimmermann
                   ` (6 subsequent siblings)
  9 siblings, 1 reply; 16+ messages in thread
From: Thomas Zimmermann @ 2024-06-14 13:21 UTC (permalink / raw)
  To: maarten.lankhorst, mripard, airlied, daniel, lucas.demarchi,
	rodrigo.vivi, jani.nikula, ray.huang, christian.koenig, kraxel,
	airlied, suijingfeng
  Cc: dri-devel, intel-xe, intel-gfx, Thomas Zimmermann

Add offset and size parameters to ttm_bo_vmap() to allow for partial
mappings of a buffer object. This brings the functionality on par with
ttm_bo_kmap().

Callers pass the byte offset and size within the buffer object and
receive a page-aligned mapping of the buffer object's memory for the
specified area.

Also update all callers of ttm_bo_vmap() for the new parameters. As
before, existing callers map the buffer object's complete memory.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
 drivers/gpu/drm/drm_gem_ttm_helper.c  |  2 +-
 drivers/gpu/drm/drm_gem_vram_helper.c |  2 +-
 drivers/gpu/drm/loongson/lsdc_gem.c   |  2 +-
 drivers/gpu/drm/qxl/qxl_object.c      |  2 +-
 drivers/gpu/drm/ttm/ttm_bo_util.c     | 21 +++++++++++++++------
 drivers/gpu/drm/xe/xe_lrc.c           |  2 +-
 drivers/gpu/drm/xe/xe_vm.c            |  2 +-
 include/drm/ttm/ttm_bo.h              |  4 +++-
 8 files changed, 24 insertions(+), 13 deletions(-)

diff --git a/drivers/gpu/drm/drm_gem_ttm_helper.c b/drivers/gpu/drm/drm_gem_ttm_helper.c
index 3734aa2d1c5b5..f26b7c9077a68 100644
--- a/drivers/gpu/drm/drm_gem_ttm_helper.c
+++ b/drivers/gpu/drm/drm_gem_ttm_helper.c
@@ -67,7 +67,7 @@ int drm_gem_ttm_vmap(struct drm_gem_object *gem,
 {
 	struct ttm_buffer_object *bo = drm_gem_ttm_of_gem(gem);
 
-	return ttm_bo_vmap(bo, map);
+	return ttm_bo_vmap(bo, 0, gem->size, map);
 }
 EXPORT_SYMBOL(drm_gem_ttm_vmap);
 
diff --git a/drivers/gpu/drm/drm_gem_vram_helper.c b/drivers/gpu/drm/drm_gem_vram_helper.c
index 6027584406af6..1670f9a459a9d 100644
--- a/drivers/gpu/drm/drm_gem_vram_helper.c
+++ b/drivers/gpu/drm/drm_gem_vram_helper.c
@@ -398,7 +398,7 @@ int drm_gem_vram_vmap(struct drm_gem_vram_object *gbo, struct iosys_map *map)
 	 * no mapping present.
 	 */
 	if (iosys_map_is_null(&gbo->map)) {
-		ret = ttm_bo_vmap(&gbo->bo, &gbo->map);
+		ret = ttm_bo_vmap(&gbo->bo, 0, gbo->bo.base.size, &gbo->map);
 		if (ret)
 			return ret;
 	}
diff --git a/drivers/gpu/drm/loongson/lsdc_gem.c b/drivers/gpu/drm/loongson/lsdc_gem.c
index a720d8f532093..f709960c781b9 100644
--- a/drivers/gpu/drm/loongson/lsdc_gem.c
+++ b/drivers/gpu/drm/loongson/lsdc_gem.c
@@ -77,7 +77,7 @@ static int lsdc_gem_object_vmap(struct drm_gem_object *obj, struct iosys_map *ma
 		return ret;
 	}
 
-	ret = ttm_bo_vmap(tbo, &lbo->map);
+	ret = ttm_bo_vmap(tbo, 0, tbo->base.size, &lbo->map);
 	if (ret) {
 		drm_err(obj->dev, "ttm bo vmap failed\n");
 		lsdc_bo_unpin(lbo);
diff --git a/drivers/gpu/drm/qxl/qxl_object.c b/drivers/gpu/drm/qxl/qxl_object.c
index 5893e27a7ae50..9f06d5e26a32c 100644
--- a/drivers/gpu/drm/qxl/qxl_object.c
+++ b/drivers/gpu/drm/qxl/qxl_object.c
@@ -164,7 +164,7 @@ int qxl_bo_vmap_locked(struct qxl_bo *bo, struct iosys_map *map)
 		goto out;
 	}
 
-	r = ttm_bo_vmap(&bo->tbo, &bo->map);
+	r = ttm_bo_vmap(&bo->tbo, 0, bo->tbo.base.size, &bo->map);
 	if (r) {
 		qxl_bo_unpin_locked(bo);
 		return r;
diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c b/drivers/gpu/drm/ttm/ttm_bo_util.c
index a9df0deff2deb..31f9772f05dac 100644
--- a/drivers/gpu/drm/ttm/ttm_bo_util.c
+++ b/drivers/gpu/drm/ttm/ttm_bo_util.c
@@ -457,17 +457,23 @@ EXPORT_SYMBOL(ttm_bo_kunmap);
  * ttm_bo_vmap
  *
  * @bo: The buffer object.
+ * @offset: Byte offset into the buffer.
+ * @size: Number of bytes to map.
  * @map: pointer to a struct iosys_map representing the map.
  *
  * Sets up a kernel virtual mapping, using ioremap or vmap to the
  * data in the buffer object. The parameter @map returns the virtual
  * address as struct iosys_map. Unmap the buffer with ttm_bo_vunmap().
+ * The address stored in @map will be aligned to the next lower page
+ * boundaries.
  *
  * Returns
  * -ENOMEM: Out of memory.
  * -EINVAL: Invalid range.
  */
-int ttm_bo_vmap(struct ttm_buffer_object *bo, struct iosys_map *map)
+int ttm_bo_vmap(struct ttm_buffer_object *bo,
+		unsigned long offset, unsigned long size,
+		struct iosys_map *map)
 {
 	struct ttm_resource *mem = bo->resource;
 	int ret;
@@ -483,18 +489,18 @@ int ttm_bo_vmap(struct ttm_buffer_object *bo, struct iosys_map *map)
 		u16 alloc_flags;
 
 		if (mem->bus.addr) {
-			vaddr_iomem = (void __iomem *)mem->bus.addr;
+			vaddr_iomem = (u8 __iomem *)mem->bus.addr + offset;
 			alloc_flags = ttm_bo_map_premapped;
 		} else if (mem->bus.caching == ttm_write_combined) {
-			vaddr_iomem = ioremap_wc(mem->bus.offset, bo->base.size);
+			vaddr_iomem = ioremap_wc(mem->bus.offset + offset, size);
 			alloc_flags = ttm_bo_map_iomap;
 #ifdef CONFIG_X86
 		} else if (mem->bus.caching == ttm_cached) {
-			vaddr_iomem = ioremap_cache(mem->bus.offset, bo->base.size);
+			vaddr_iomem = ioremap_cache(mem->bus.offset + offset, size);
 			alloc_flags = ttm_bo_map_iomap;
 #endif
 		} else {
-			vaddr_iomem = ioremap(mem->bus.offset, bo->base.size);
+			vaddr_iomem = ioremap(mem->bus.offset + offset, size);
 			alloc_flags = ttm_bo_map_iomap;
 		}
 
@@ -510,6 +516,9 @@ int ttm_bo_vmap(struct ttm_buffer_object *bo, struct iosys_map *map)
 			.no_wait_gpu = false
 		};
 		struct ttm_tt *ttm = bo->ttm;
+		unsigned long start_page = offset >> PAGE_SHIFT;
+		unsigned long aligned_size = size + (offset - (start_page << PAGE_SHIFT));
+		unsigned long num_pages = DIV_ROUND_UP(aligned_size, PAGE_SIZE);
 		pgprot_t prot;
 		void *vaddr;
 		u16 alloc_flags;
@@ -523,7 +532,7 @@ int ttm_bo_vmap(struct ttm_buffer_object *bo, struct iosys_map *map)
 		 * or to make the buffer object look contiguous.
 		 */
 		prot = ttm_io_prot(bo, mem, PAGE_KERNEL);
-		vaddr = vmap(ttm->pages, ttm->num_pages, 0, prot);
+		vaddr = vmap(ttm->pages + start_page, num_pages, 0, prot);
 		if (!vaddr)
 			return -ENOMEM;
 		alloc_flags = ttm_bo_map_vmap;
diff --git a/drivers/gpu/drm/xe/xe_lrc.c b/drivers/gpu/drm/xe/xe_lrc.c
index c1bb85d2e243f..3a68fe6d592ed 100644
--- a/drivers/gpu/drm/xe/xe_lrc.c
+++ b/drivers/gpu/drm/xe/xe_lrc.c
@@ -1595,7 +1595,7 @@ void xe_lrc_snapshot_capture_delayed(struct xe_lrc_snapshot *snapshot)
 		goto put_bo;
 
 	xe_bo_lock(bo, false);
-	if (!ttm_bo_vmap(&bo->ttm, &src)) {
+	if (!ttm_bo_vmap(&bo->ttm, 0, bo->ttm.base.size, &src)) {
 		xe_map_memcpy_from(xe_bo_device(bo),
 				   snapshot->lrc_snapshot, &src, snapshot->lrc_offset,
 				   snapshot->lrc_size);
diff --git a/drivers/gpu/drm/xe/xe_vm.c b/drivers/gpu/drm/xe/xe_vm.c
index 99bf7412475c0..81306c32f5d09 100644
--- a/drivers/gpu/drm/xe/xe_vm.c
+++ b/drivers/gpu/drm/xe/xe_vm.c
@@ -3485,7 +3485,7 @@ void xe_vm_snapshot_capture_delayed(struct xe_vm_snapshot *snap)
 
 		if (bo) {
 			xe_bo_lock(bo, false);
-			err = ttm_bo_vmap(&bo->ttm, &src);
+			err = ttm_bo_vmap(&bo->ttm, 0, bo->ttm.base.size, &src);
 			if (!err) {
 				xe_map_memcpy_from(xe_bo_device(bo),
 						   snap->snap[i].data,
diff --git a/include/drm/ttm/ttm_bo.h b/include/drm/ttm/ttm_bo.h
index 6ccf96c91f3ae..c421ffe3563b1 100644
--- a/include/drm/ttm/ttm_bo.h
+++ b/include/drm/ttm/ttm_bo.h
@@ -375,7 +375,9 @@ int ttm_bo_init_validate(struct ttm_device *bdev, struct ttm_buffer_object *bo,
 int ttm_bo_kmap(struct ttm_buffer_object *bo, unsigned long start_page,
 		unsigned long num_pages, struct ttm_bo_kmap_obj *map);
 void ttm_bo_kunmap(struct ttm_bo_kmap_obj *map);
-int ttm_bo_vmap(struct ttm_buffer_object *bo, struct iosys_map *map);
+int ttm_bo_vmap(struct ttm_buffer_object *bo,
+		unsigned long offset, unsigned long size,
+		struct iosys_map *map);
 void ttm_bo_vunmap(struct ttm_buffer_object *bo, struct iosys_map *map);
 int ttm_bo_mmap_obj(struct vm_area_struct *vma, struct ttm_buffer_object *bo);
 int ttm_bo_swapout(struct ttm_buffer_object *bo, struct ttm_operation_ctx *ctx,
-- 
2.45.2


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

* [PATCH 4/6] drm/ttm: Support kmap for single-page mappings in ttm_bo_vmap()
  2024-06-14 13:21 [PATCH 0/6] drm/{ttm,xe}: Improve ttm_bo_vmap() and update xe Thomas Zimmermann
                   ` (2 preceding siblings ...)
  2024-06-14 13:21 ` [PATCH 3/6] drm/ttm: Support partial buffer mappings for ttm_bo_vmap() Thomas Zimmermann
@ 2024-06-14 13:21 ` Thomas Zimmermann
  2024-06-14 13:21 ` [PATCH 5/6] drm/xe: Remove vunmap calls object-freeing code Thomas Zimmermann
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 16+ messages in thread
From: Thomas Zimmermann @ 2024-06-14 13:21 UTC (permalink / raw)
  To: maarten.lankhorst, mripard, airlied, daniel, lucas.demarchi,
	rodrigo.vivi, jani.nikula, ray.huang, christian.koenig, kraxel,
	airlied, suijingfeng
  Cc: dri-devel, intel-xe, intel-gfx, Thomas Zimmermann

In ttm_bo_vmap(), set up single-page mappings with kmap() in certain
cases. The feature is already present in ttm_bo_kmap().

This functionality is require by DRM's xe driver, which claims that
using kmap() is an optimization over vmap(). [1] Reading the commit
at [2] indicates otherwise. It is not possible to use kmap_local_page()
and kunmap_local_page(), as TTM cannot guarantee the requirements for
ordering these calls. [3]

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Link: https://elixir.bootlin.com/linux/v6.9/source/drivers/gpu/drm/xe/xe_bo.c#L1870 # 1
Link: https://lore.kernel.org/all/20220813220034.806698-1-ira.weiny@intel.com/T/#u # 2
Link: https://elixir.bootlin.com/linux/v6.9/source/include/linux/highmem.h#L70 # 3
---
 drivers/gpu/drm/ttm/ttm_bo_util.c | 33 ++++++++++++++++++++++---------
 1 file changed, 24 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c b/drivers/gpu/drm/ttm/ttm_bo_util.c
index 31f9772f05dac..c06cfccace39d 100644
--- a/drivers/gpu/drm/ttm/ttm_bo_util.c
+++ b/drivers/gpu/drm/ttm/ttm_bo_util.c
@@ -516,6 +516,8 @@ int ttm_bo_vmap(struct ttm_buffer_object *bo,
 			.no_wait_gpu = false
 		};
 		struct ttm_tt *ttm = bo->ttm;
+		struct ttm_resource_manager *man =
+			ttm_manager_type(bo->bdev, bo->resource->mem_type);
 		unsigned long start_page = offset >> PAGE_SHIFT;
 		unsigned long aligned_size = size + (offset - (start_page << PAGE_SHIFT));
 		unsigned long num_pages = DIV_ROUND_UP(aligned_size, PAGE_SIZE);
@@ -527,15 +529,25 @@ int ttm_bo_vmap(struct ttm_buffer_object *bo,
 		if (ret)
 			return ret;
 
-		/*
-		 * We need to use vmap to get the desired page protection
-		 * or to make the buffer object look contiguous.
-		 */
-		prot = ttm_io_prot(bo, mem, PAGE_KERNEL);
-		vaddr = vmap(ttm->pages + start_page, num_pages, 0, prot);
-		if (!vaddr)
-			return -ENOMEM;
-		alloc_flags = ttm_bo_map_vmap;
+		if (num_pages == 1 && ttm->caching == ttm_cached &&
+		    !(man->use_tt && (ttm->page_flags & TTM_TT_FLAG_DECRYPTED))) {
+			/*
+			 * We're mapping a single page, and the desired
+			 * page protection is consistent with the bo.
+			 */
+			vaddr = kmap(ttm->pages[start_page]);
+			alloc_flags = ttm_bo_map_kmap;
+		} else {
+			/*
+			 * We need to use vmap to get the desired page protection
+			 * or to make the buffer object look contiguous.
+			 */
+			prot = ttm_io_prot(bo, mem, PAGE_KERNEL);
+			vaddr = vmap(ttm->pages + start_page, num_pages, 0, prot);
+			if (!vaddr)
+				return -ENOMEM;
+			alloc_flags = ttm_bo_map_vmap;
+		}
 
 		iosys_map_set_vaddr(map, vaddr);
 		map->alloc_flags = alloc_flags;
@@ -567,6 +579,9 @@ void ttm_bo_vunmap(struct ttm_buffer_object *bo, struct iosys_map *map)
 	case ttm_bo_map_vmap:
 		vunmap(map->vaddr);
 		break;
+	case ttm_bo_map_kmap:
+		kunmap(kmap_to_page(map->vaddr));
+		break;
 	case ttm_bo_map_premapped:
 		break;
 	default:
-- 
2.45.2


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

* [PATCH 5/6] drm/xe: Remove vunmap calls object-freeing code
  2024-06-14 13:21 [PATCH 0/6] drm/{ttm,xe}: Improve ttm_bo_vmap() and update xe Thomas Zimmermann
                   ` (3 preceding siblings ...)
  2024-06-14 13:21 ` [PATCH 4/6] drm/ttm: Support kmap for single-page mappings in ttm_bo_vmap() Thomas Zimmermann
@ 2024-06-14 13:21 ` Thomas Zimmermann
  2024-06-14 13:22 ` [PATCH 6/6] drm/xe: Replace ttm_bo_kmap() with ttm_bo_vmap() Thomas Zimmermann
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 16+ messages in thread
From: Thomas Zimmermann @ 2024-06-14 13:21 UTC (permalink / raw)
  To: maarten.lankhorst, mripard, airlied, daniel, lucas.demarchi,
	rodrigo.vivi, jani.nikula, ray.huang, christian.koenig, kraxel,
	airlied, suijingfeng
  Cc: dri-devel, intel-xe, intel-gfx, Thomas Zimmermann

Move calls to unmap the buffer-object memory from the object-release
code in xe_gem_object_free() to the caller of the release.

Doing an unmap for a BO requires holding the reservation lock, which
is not allowed while releasing a GEM object. Without the reservation
lock, TTM can concurrently evict the buffer object that is to be
released; making the mapping invalid.

Pushing the unmap calls, namely xe_bo_vunmap(), releases the mapped
pages before the buffer object.

While at it, add a warning about buffer mappings to the GEM-object
release code. The warning message and unmap code can be removed after
the driver has been audited to not release mapped buffer objects.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
 drivers/gpu/drm/xe/display/intel_fb_bo.c | 12 +++++++-----
 drivers/gpu/drm/xe/xe_bo.c               | 14 +++++++++++++-
 drivers/gpu/drm/xe/xe_bo.h               | 23 ++++++++++++-----------
 drivers/gpu/drm/xe/xe_lrc.c              |  1 +
 4 files changed, 33 insertions(+), 17 deletions(-)

diff --git a/drivers/gpu/drm/xe/display/intel_fb_bo.c b/drivers/gpu/drm/xe/display/intel_fb_bo.c
index f835492f73fb4..cf2720dbdd51f 100644
--- a/drivers/gpu/drm/xe/display/intel_fb_bo.c
+++ b/drivers/gpu/drm/xe/display/intel_fb_bo.c
@@ -12,12 +12,14 @@
 
 void intel_fb_bo_framebuffer_fini(struct xe_bo *bo)
 {
-	if (bo->flags & XE_BO_FLAG_PINNED) {
-		/* Unpin our kernel fb first */
-		xe_bo_lock(bo, false);
+	xe_bo_lock(bo, false);
+	xe_bo_vunmap(bo);
+
+	/* Unpin our kernel fb first */
+	if (bo->flags & XE_BO_FLAG_PINNED)
 		xe_bo_unpin(bo);
-		xe_bo_unlock(bo);
-	}
+
+	xe_bo_unlock(bo);
 	xe_bo_put(bo);
 }
 
diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
index 2bae01ce4e5b9..a98d857ff1e5a 100644
--- a/drivers/gpu/drm/xe/xe_bo.c
+++ b/drivers/gpu/drm/xe/xe_bo.c
@@ -1093,6 +1093,19 @@ static void xe_ttm_bo_destroy(struct ttm_buffer_object *ttm_bo)
 
 static void xe_gem_object_free(struct drm_gem_object *obj)
 {
+	struct xe_bo *bo = gem_to_xe_bo(obj);
+
+	/*
+	 * Trying to free the object with a mapping in place. Resolve
+	 * this warning by calling xe_bo_vunmap() in the code that leads
+	 * ot this object release.
+	 *
+	 * TODO: Audit the driver to not release mapped buffer objects and
+	 *       then remove this block.
+	 */
+	if (drm_WARN_ON(obj->dev, !iosys_map_is_null(&bo->vmap)))
+		__xe_bo_vunmap(bo);
+
 	/* Our BO reference counting scheme works as follows:
 	 *
 	 * The gem object kref is typically used throughout the driver,
@@ -1106,7 +1119,6 @@ static void xe_gem_object_free(struct drm_gem_object *obj)
 	 * driver ttm callbacks is allowed to use the ttm_buffer_object
 	 * refcount directly if needed.
 	 */
-	__xe_bo_vunmap(gem_to_xe_bo(obj));
 	ttm_bo_put(container_of(obj, struct ttm_buffer_object, base));
 }
 
diff --git a/drivers/gpu/drm/xe/xe_bo.h b/drivers/gpu/drm/xe/xe_bo.h
index 6de894c728f54..5d1f8f13fbf13 100644
--- a/drivers/gpu/drm/xe/xe_bo.h
+++ b/drivers/gpu/drm/xe/xe_bo.h
@@ -170,17 +170,6 @@ static inline bool xe_bo_is_pinned(struct xe_bo *bo)
 	return bo->ttm.pin_count;
 }
 
-static inline void xe_bo_unpin_map_no_vm(struct xe_bo *bo)
-{
-	if (likely(bo)) {
-		xe_bo_lock(bo, false);
-		xe_bo_unpin(bo);
-		xe_bo_unlock(bo);
-
-		xe_bo_put(bo);
-	}
-}
-
 bool xe_bo_is_xe_bo(struct ttm_buffer_object *bo);
 dma_addr_t __xe_bo_addr(struct xe_bo *bo, u64 offset, size_t page_size);
 dma_addr_t xe_bo_addr(struct xe_bo *bo, u64 offset, size_t page_size);
@@ -202,6 +191,18 @@ xe_bo_ggtt_addr(struct xe_bo *bo)
 int xe_bo_vmap(struct xe_bo *bo);
 void xe_bo_vunmap(struct xe_bo *bo);
 
+static inline void xe_bo_unpin_map_no_vm(struct xe_bo *bo)
+{
+	if (likely(bo)) {
+		xe_bo_lock(bo, false);
+		xe_bo_vunmap(bo);
+		xe_bo_unpin(bo);
+		xe_bo_unlock(bo);
+
+		xe_bo_put(bo);
+	}
+}
+
 bool mem_type_is_vram(u32 mem_type);
 bool xe_bo_is_vram(struct xe_bo *bo);
 bool xe_bo_is_stolen(struct xe_bo *bo);
diff --git a/drivers/gpu/drm/xe/xe_lrc.c b/drivers/gpu/drm/xe/xe_lrc.c
index 3a68fe6d592ed..8a52797fe79bb 100644
--- a/drivers/gpu/drm/xe/xe_lrc.c
+++ b/drivers/gpu/drm/xe/xe_lrc.c
@@ -812,6 +812,7 @@ static void xe_lrc_finish(struct xe_lrc *lrc)
 {
 	xe_hw_fence_ctx_finish(&lrc->fence_ctx);
 	xe_bo_lock(lrc->bo, false);
+	xe_bo_vunmap(lrc->bo);
 	xe_bo_unpin(lrc->bo);
 	xe_bo_unlock(lrc->bo);
 	xe_bo_put(lrc->bo);
-- 
2.45.2


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

* [PATCH 6/6] drm/xe: Replace ttm_bo_kmap() with ttm_bo_vmap()
  2024-06-14 13:21 [PATCH 0/6] drm/{ttm,xe}: Improve ttm_bo_vmap() and update xe Thomas Zimmermann
                   ` (4 preceding siblings ...)
  2024-06-14 13:21 ` [PATCH 5/6] drm/xe: Remove vunmap calls object-freeing code Thomas Zimmermann
@ 2024-06-14 13:22 ` Thomas Zimmermann
  2024-06-14 14:18 ` ✗ Fi.CI.CHECKPATCH: warning for drm/{ttm,xe}: Improve ttm_bo_vmap() and update xe Patchwork
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 16+ messages in thread
From: Thomas Zimmermann @ 2024-06-14 13:22 UTC (permalink / raw)
  To: maarten.lankhorst, mripard, airlied, daniel, lucas.demarchi,
	rodrigo.vivi, jani.nikula, ray.huang, christian.koenig, kraxel,
	airlied, suijingfeng
  Cc: dri-devel, intel-xe, intel-gfx, Thomas Zimmermann

Use the newer ttm_bo_vmap() instead of ttm_bo_kmap(). The new interface
uses struct iomap_map, which helps with pointer setup and memcpy() ops.
Removes a TODO item and quite a bit of workarounds from the code.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
 .../compat-i915-headers/gem/i915_gem_object.h | 17 +++-------
 drivers/gpu/drm/xe/xe_bo.c                    | 32 ++++---------------
 drivers/gpu/drm/xe/xe_bo_types.h              |  2 --
 3 files changed, 10 insertions(+), 41 deletions(-)

diff --git a/drivers/gpu/drm/xe/compat-i915-headers/gem/i915_gem_object.h b/drivers/gpu/drm/xe/compat-i915-headers/gem/i915_gem_object.h
index 777c20ceabab1..25ae56d700431 100644
--- a/drivers/gpu/drm/xe/compat-i915-headers/gem/i915_gem_object.h
+++ b/drivers/gpu/drm/xe/compat-i915-headers/gem/i915_gem_object.h
@@ -34,28 +34,19 @@ static inline bool i915_gem_object_is_userptr(const struct xe_bo *bo)
 static inline int i915_gem_object_read_from_page(struct xe_bo *bo,
 					  u32 ofs, u64 *ptr, u32 size)
 {
-	struct ttm_bo_kmap_obj map;
-	void *src;
-	bool is_iomem;
+	struct iosys_map src;
 	int ret;
 
 	ret = xe_bo_lock(bo, true);
 	if (ret)
 		return ret;
 
-	ret = ttm_bo_kmap(&bo->ttm, ofs >> PAGE_SHIFT, 1, &map);
+	ret = ttm_bo_vmap(&bo->ttm, ofs, size, &src);
 	if (ret)
 		goto out_unlock;
+	iosys_map_memcpy_from(ptr, &src, ofs & ~PAGE_MASK, size);
+	ttm_bo_vunmap(&bo->ttm, &src);
 
-	ofs &= ~PAGE_MASK;
-	src = ttm_kmap_obj_virtual(&map, &is_iomem);
-	src += ofs;
-	if (is_iomem)
-		memcpy_fromio(ptr, (void __iomem *)src, size);
-	else
-		memcpy(ptr, src, size);
-
-	ttm_bo_kunmap(&map);
 out_unlock:
 	xe_bo_unlock(bo);
 	return ret;
diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
index a98d857ff1e5a..6158e1a959cd4 100644
--- a/drivers/gpu/drm/xe/xe_bo.c
+++ b/drivers/gpu/drm/xe/xe_bo.c
@@ -1888,10 +1888,6 @@ dma_addr_t xe_bo_addr(struct xe_bo *bo, u64 offset, size_t page_size)
 
 int xe_bo_vmap(struct xe_bo *bo)
 {
-	void *virtual;
-	bool is_iomem;
-	int ret;
-
 	xe_bo_assert_held(bo);
 
 	if (!(bo->flags & XE_BO_FLAG_NEEDS_CPU_ACCESS))
@@ -1900,32 +1896,16 @@ int xe_bo_vmap(struct xe_bo *bo)
 	if (!iosys_map_is_null(&bo->vmap))
 		return 0;
 
-	/*
-	 * We use this more or less deprecated interface for now since
-	 * ttm_bo_vmap() doesn't offer the optimization of kmapping
-	 * single page bos, which is done here.
-	 * TODO: Fix up ttm_bo_vmap to do that, or fix up ttm_bo_kmap
-	 * to use struct iosys_map.
-	 */
-	ret = ttm_bo_kmap(&bo->ttm, 0, bo->size >> PAGE_SHIFT, &bo->kmap);
-	if (ret)
-		return ret;
-
-	virtual = ttm_kmap_obj_virtual(&bo->kmap, &is_iomem);
-	if (is_iomem)
-		iosys_map_set_vaddr_iomem(&bo->vmap, (void __iomem *)virtual);
-	else
-		iosys_map_set_vaddr(&bo->vmap, virtual);
-
-	return 0;
+	return ttm_bo_vmap(&bo->ttm, 0, bo->size, &bo->vmap);
 }
 
 static void __xe_bo_vunmap(struct xe_bo *bo)
 {
-	if (!iosys_map_is_null(&bo->vmap)) {
-		iosys_map_clear(&bo->vmap);
-		ttm_bo_kunmap(&bo->kmap);
-	}
+	if (iosys_map_is_null(&bo->vmap))
+		return;
+
+	ttm_bo_vunmap(&bo->ttm, &bo->vmap);
+	iosys_map_clear(&bo->vmap);
 }
 
 void xe_bo_vunmap(struct xe_bo *bo)
diff --git a/drivers/gpu/drm/xe/xe_bo_types.h b/drivers/gpu/drm/xe/xe_bo_types.h
index 86422e113d396..5cba681ba73c2 100644
--- a/drivers/gpu/drm/xe/xe_bo_types.h
+++ b/drivers/gpu/drm/xe/xe_bo_types.h
@@ -42,8 +42,6 @@ struct xe_bo {
 	struct drm_mm_node ggtt_node;
 	/** @vmap: iosys map of this buffer */
 	struct iosys_map vmap;
-	/** @ttm_kmap: TTM bo kmap object for internal use only. Keep off. */
-	struct ttm_bo_kmap_obj kmap;
 	/** @pinned_link: link to present / evicted list of pinned BO */
 	struct list_head pinned_link;
 #ifdef CONFIG_PROC_FS
-- 
2.45.2


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

* ✗ Fi.CI.CHECKPATCH: warning for drm/{ttm,xe}: Improve ttm_bo_vmap() and update xe
  2024-06-14 13:21 [PATCH 0/6] drm/{ttm,xe}: Improve ttm_bo_vmap() and update xe Thomas Zimmermann
                   ` (5 preceding siblings ...)
  2024-06-14 13:22 ` [PATCH 6/6] drm/xe: Replace ttm_bo_kmap() with ttm_bo_vmap() Thomas Zimmermann
@ 2024-06-14 14:18 ` Patchwork
  2024-06-14 14:18 ` ✗ Fi.CI.SPARSE: " Patchwork
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 16+ messages in thread
From: Patchwork @ 2024-06-14 14:18 UTC (permalink / raw)
  To: Thomas Zimmermann; +Cc: intel-gfx

== Series Details ==

Series: drm/{ttm,xe}: Improve ttm_bo_vmap() and update xe
URL   : https://patchwork.freedesktop.org/series/134891/
State : warning

== Summary ==

Error: dim checkpatch failed
9e6b478225b7 iosys-map: Add allocator flags
77686d1beaaf drm/ttm: Store the bo_kmap_type in struct iosys_map
f6c08785dc7f drm/ttm: Support partial buffer mappings for ttm_bo_vmap()
a6e718455990 drm/ttm: Support kmap for single-page mappings in ttm_bo_vmap()
-:53: WARNING:DEPRECATED_API: Deprecated use of 'kmap', prefer 'kmap_local_page' instead
#53: FILE: drivers/gpu/drm/ttm/ttm_bo_util.c:538:
+			vaddr = kmap(ttm->pages[start_page]);

-:74: WARNING:DEPRECATED_API: Deprecated use of 'kunmap', prefer 'kunmap_local' instead
#74: FILE: drivers/gpu/drm/ttm/ttm_bo_util.c:583:
+		kunmap(kmap_to_page(map->vaddr));

total: 0 errors, 2 warnings, 0 checks, 51 lines checked
0bc209bee997 drm/xe: Remove vunmap calls object-freeing code
647ef007ceb6 drm/xe: Replace ttm_bo_kmap() with ttm_bo_vmap()



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

* ✗ Fi.CI.SPARSE: warning for drm/{ttm,xe}: Improve ttm_bo_vmap() and update xe
  2024-06-14 13:21 [PATCH 0/6] drm/{ttm,xe}: Improve ttm_bo_vmap() and update xe Thomas Zimmermann
                   ` (6 preceding siblings ...)
  2024-06-14 14:18 ` ✗ Fi.CI.CHECKPATCH: warning for drm/{ttm,xe}: Improve ttm_bo_vmap() and update xe Patchwork
@ 2024-06-14 14:18 ` Patchwork
  2024-06-14 14:32 ` ✓ Fi.CI.BAT: success " Patchwork
  2024-06-16 21:28 ` ✗ Fi.CI.IGT: failure " Patchwork
  9 siblings, 0 replies; 16+ messages in thread
From: Patchwork @ 2024-06-14 14:18 UTC (permalink / raw)
  To: Thomas Zimmermann; +Cc: intel-gfx

== Series Details ==

Series: drm/{ttm,xe}: Improve ttm_bo_vmap() and update xe
URL   : https://patchwork.freedesktop.org/series/134891/
State : warning

== Summary ==

Error: dim sparse failed
Sparse version: v0.6.2
Fast mode used, each commit won't be checked separately.



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

* Re: [PATCH 2/6] drm/ttm: Store the bo_kmap_type in struct iosys_map
  2024-06-14 13:21 ` [PATCH 2/6] drm/ttm: Store the bo_kmap_type in struct iosys_map Thomas Zimmermann
@ 2024-06-14 14:31   ` Christian König
  2024-06-17 12:32     ` Thomas Zimmermann
  0 siblings, 1 reply; 16+ messages in thread
From: Christian König @ 2024-06-14 14:31 UTC (permalink / raw)
  To: Thomas Zimmermann, maarten.lankhorst, mripard, airlied, daniel,
	lucas.demarchi, rodrigo.vivi, jani.nikula, ray.huang, kraxel,
	airlied, suijingfeng
  Cc: dri-devel, intel-xe, intel-gfx

Am 14.06.24 um 15:21 schrieb Thomas Zimmermann:
> For each instances of struct iosys_map set up by ttm_bo_vmap(), store
> the type of allocation in the instance. Use this information to unmap
> the memory in ttm_bo_vunmap(). This change simplifies the unmap code
> and puts the complicated logic entirely into the map code.

I'm not sure that's a good idea.

The mapping information should already be available in the resource and 
storing it in the iosys_map structures duplicates that information.

So we might run into the issue that the resource has changed and so we 
need a different approach now, but the iosys_map will say that we should 
unmap things for example.

Regards,
Christian.

>
> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
> ---
>   drivers/gpu/drm/ttm/ttm_bo_util.c | 46 +++++++++++++++++++++----------
>   1 file changed, 31 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c b/drivers/gpu/drm/ttm/ttm_bo_util.c
> index 0b3f4267130c4..a9df0deff2deb 100644
> --- a/drivers/gpu/drm/ttm/ttm_bo_util.c
> +++ b/drivers/gpu/drm/ttm/ttm_bo_util.c
> @@ -36,6 +36,7 @@
>   #include <drm/ttm/ttm_tt.h>
>   
>   #include <drm/drm_cache.h>
> +#include <drm/drm_device.h>
>   
>   struct ttm_transfer_obj {
>   	struct ttm_buffer_object base;
> @@ -479,24 +480,29 @@ int ttm_bo_vmap(struct ttm_buffer_object *bo, struct iosys_map *map)
>   
>   	if (mem->bus.is_iomem) {
>   		void __iomem *vaddr_iomem;
> +		u16 alloc_flags;
>   
> -		if (mem->bus.addr)
> +		if (mem->bus.addr) {
>   			vaddr_iomem = (void __iomem *)mem->bus.addr;
> -		else if (mem->bus.caching == ttm_write_combined)
> -			vaddr_iomem = ioremap_wc(mem->bus.offset,
> -						 bo->base.size);
> +			alloc_flags = ttm_bo_map_premapped;
> +		} else if (mem->bus.caching == ttm_write_combined) {
> +			vaddr_iomem = ioremap_wc(mem->bus.offset, bo->base.size);
> +			alloc_flags = ttm_bo_map_iomap;
>   #ifdef CONFIG_X86
> -		else if (mem->bus.caching == ttm_cached)
> -			vaddr_iomem = ioremap_cache(mem->bus.offset,
> -						  bo->base.size);
> +		} else if (mem->bus.caching == ttm_cached) {
> +			vaddr_iomem = ioremap_cache(mem->bus.offset, bo->base.size);
> +			alloc_flags = ttm_bo_map_iomap;
>   #endif
> -		else
> +		} else {
>   			vaddr_iomem = ioremap(mem->bus.offset, bo->base.size);
> +			alloc_flags = ttm_bo_map_iomap;
> +		}
>   
>   		if (!vaddr_iomem)
>   			return -ENOMEM;
>   
>   		iosys_map_set_vaddr_iomem(map, vaddr_iomem);
> +		map->alloc_flags = alloc_flags;
>   
>   	} else {
>   		struct ttm_operation_ctx ctx = {
> @@ -506,6 +512,7 @@ int ttm_bo_vmap(struct ttm_buffer_object *bo, struct iosys_map *map)
>   		struct ttm_tt *ttm = bo->ttm;
>   		pgprot_t prot;
>   		void *vaddr;
> +		u16 alloc_flags;
>   
>   		ret = ttm_tt_populate(bo->bdev, ttm, &ctx);
>   		if (ret)
> @@ -519,8 +526,10 @@ int ttm_bo_vmap(struct ttm_buffer_object *bo, struct iosys_map *map)
>   		vaddr = vmap(ttm->pages, ttm->num_pages, 0, prot);
>   		if (!vaddr)
>   			return -ENOMEM;
> +		alloc_flags = ttm_bo_map_vmap;
>   
>   		iosys_map_set_vaddr(map, vaddr);
> +		map->alloc_flags = alloc_flags;
>   	}
>   
>   	return 0;
> @@ -537,20 +546,27 @@ EXPORT_SYMBOL(ttm_bo_vmap);
>    */
>   void ttm_bo_vunmap(struct ttm_buffer_object *bo, struct iosys_map *map)
>   {
> -	struct ttm_resource *mem = bo->resource;
> -
>   	dma_resv_assert_held(bo->base.resv);
>   
>   	if (iosys_map_is_null(map))
>   		return;
>   
> -	if (!map->is_iomem)
> -		vunmap(map->vaddr);
> -	else if (!mem->bus.addr)
> +	switch (map->alloc_flags) {
> +	case ttm_bo_map_iomap:
>   		iounmap(map->vaddr_iomem);
> -	iosys_map_clear(map);
> -
> +		break;
> +	case ttm_bo_map_vmap:
> +		vunmap(map->vaddr);
> +		break;
> +	case ttm_bo_map_premapped:
> +		break;
> +	default:
> +		drm_err(bo->base.dev, "Unsupported alloc_flags 0x%x\n", map->alloc_flags);
> +		return;
> +	}
>   	ttm_mem_io_free(bo->bdev, bo->resource);
> +
> +	iosys_map_clear(map);
>   }
>   EXPORT_SYMBOL(ttm_bo_vunmap);
>   


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

* ✓ Fi.CI.BAT: success for drm/{ttm,xe}: Improve ttm_bo_vmap() and update xe
  2024-06-14 13:21 [PATCH 0/6] drm/{ttm,xe}: Improve ttm_bo_vmap() and update xe Thomas Zimmermann
                   ` (7 preceding siblings ...)
  2024-06-14 14:18 ` ✗ Fi.CI.SPARSE: " Patchwork
@ 2024-06-14 14:32 ` Patchwork
  2024-06-16 21:28 ` ✗ Fi.CI.IGT: failure " Patchwork
  9 siblings, 0 replies; 16+ messages in thread
From: Patchwork @ 2024-06-14 14:32 UTC (permalink / raw)
  To: Thomas Zimmermann; +Cc: intel-gfx

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

== Series Details ==

Series: drm/{ttm,xe}: Improve ttm_bo_vmap() and update xe
URL   : https://patchwork.freedesktop.org/series/134891/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_14943 -> Patchwork_134891v1
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/index.html

Participating hosts (43 -> 41)
------------------------------

  Additional (1): fi-kbl-8809g 
  Missing    (3): fi-cfl-8109u fi-snb-2520m bat-mtlp-6 

Possible new issues
-------------------

  Here are the unknown changes that may have been introduced in Patchwork_134891v1:

### IGT changes ###

#### Suppressed ####

  The following results come from untrusted machines, tests, or statuses.
  They do not affect the overall result.

  * igt@i915_selftest@live@guc:
    - {bat-arlh-2}:       [PASS][1] -> [INCOMPLETE][2]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14943/bat-arlh-2/igt@i915_selftest@live@guc.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/bat-arlh-2/igt@i915_selftest@live@guc.html

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

  Here are the changes found in Patchwork_134891v1 that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@gem_huc_copy@huc-copy:
    - fi-kbl-8809g:       NOTRUN -> [SKIP][3] ([i915#2190])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/fi-kbl-8809g/igt@gem_huc_copy@huc-copy.html

  * igt@gem_lmem_swapping@parallel-random-engines:
    - fi-kbl-8809g:       NOTRUN -> [SKIP][4] ([i915#4613]) +3 other tests skip
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/fi-kbl-8809g/igt@gem_lmem_swapping@parallel-random-engines.html

  * igt@i915_selftest@live@gt_mocs:
    - bat-adlm-1:         [PASS][5] -> [INCOMPLETE][6] ([i915#9413])
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14943/bat-adlm-1/igt@i915_selftest@live@gt_mocs.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/bat-adlm-1/igt@i915_selftest@live@gt_mocs.html

  * igt@kms_dsc@dsc-basic:
    - fi-kbl-8809g:       NOTRUN -> [SKIP][7] +30 other tests skip
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/fi-kbl-8809g/igt@kms_dsc@dsc-basic.html

  
#### Possible fixes ####

  * igt@kms_pipe_crc_basic@nonblocking-crc@pipe-c-dp-8:
    - {bat-mtlp-9}:       [DMESG-FAIL][8] ([i915#11009]) -> [PASS][9]
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14943/bat-mtlp-9/igt@kms_pipe_crc_basic@nonblocking-crc@pipe-c-dp-8.html
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/bat-mtlp-9/igt@kms_pipe_crc_basic@nonblocking-crc@pipe-c-dp-8.html

  * igt@kms_pipe_crc_basic@nonblocking-crc@pipe-d-dp-8:
    - {bat-mtlp-9}:       [FAIL][10] ([i915#10979]) -> [PASS][11]
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14943/bat-mtlp-9/igt@kms_pipe_crc_basic@nonblocking-crc@pipe-d-dp-8.html
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/bat-mtlp-9/igt@kms_pipe_crc_basic@nonblocking-crc@pipe-d-dp-8.html

  
  {name}: This element is suppressed. This means it is ignored when computing
          the status of the difference (SUCCESS, WARNING, or FAILURE).

  [i915#10580]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10580
  [i915#10979]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10979
  [i915#11009]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11009
  [i915#11060]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11060
  [i915#2190]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2190
  [i915#4613]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4613
  [i915#6121]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6121
  [i915#9413]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9413


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

  * Linux: CI_DRM_14943 -> Patchwork_134891v1

  CI-20190529: 20190529
  CI_DRM_14943: 00e9498b453447a5afe527bd0e174587b12f66d2 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_7888: 021538d059575eb9f93d36fea36015cd3f9fca7d @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  Patchwork_134891v1: 00e9498b453447a5afe527bd0e174587b12f66d2 @ git://anongit.freedesktop.org/gfx-ci/linux

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/index.html

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

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

* Re: [PATCH 3/6] drm/ttm: Support partial buffer mappings for ttm_bo_vmap()
  2024-06-14 13:21 ` [PATCH 3/6] drm/ttm: Support partial buffer mappings for ttm_bo_vmap() Thomas Zimmermann
@ 2024-06-14 14:33   ` Christian König
  2024-06-17 13:00     ` Thomas Zimmermann
  0 siblings, 1 reply; 16+ messages in thread
From: Christian König @ 2024-06-14 14:33 UTC (permalink / raw)
  To: Thomas Zimmermann, maarten.lankhorst, mripard, airlied, daniel,
	lucas.demarchi, rodrigo.vivi, jani.nikula, ray.huang, kraxel,
	airlied, suijingfeng
  Cc: dri-devel, intel-xe, intel-gfx

Am 14.06.24 um 15:21 schrieb Thomas Zimmermann:
> Add offset and size parameters to ttm_bo_vmap() to allow for partial
> mappings of a buffer object. This brings the functionality on par with
> ttm_bo_kmap().

Well the long term plan was to remove this functionality from 
ttm_bo_kmap() and nuke that function sooner or later.

What exactly is the use case for partial mappings?

Regards,
Christian.

>
> Callers pass the byte offset and size within the buffer object and
> receive a page-aligned mapping of the buffer object's memory for the
> specified area.
>
> Also update all callers of ttm_bo_vmap() for the new parameters. As
> before, existing callers map the buffer object's complete memory.
>
> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
> ---
>   drivers/gpu/drm/drm_gem_ttm_helper.c  |  2 +-
>   drivers/gpu/drm/drm_gem_vram_helper.c |  2 +-
>   drivers/gpu/drm/loongson/lsdc_gem.c   |  2 +-
>   drivers/gpu/drm/qxl/qxl_object.c      |  2 +-
>   drivers/gpu/drm/ttm/ttm_bo_util.c     | 21 +++++++++++++++------
>   drivers/gpu/drm/xe/xe_lrc.c           |  2 +-
>   drivers/gpu/drm/xe/xe_vm.c            |  2 +-
>   include/drm/ttm/ttm_bo.h              |  4 +++-
>   8 files changed, 24 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_gem_ttm_helper.c b/drivers/gpu/drm/drm_gem_ttm_helper.c
> index 3734aa2d1c5b5..f26b7c9077a68 100644
> --- a/drivers/gpu/drm/drm_gem_ttm_helper.c
> +++ b/drivers/gpu/drm/drm_gem_ttm_helper.c
> @@ -67,7 +67,7 @@ int drm_gem_ttm_vmap(struct drm_gem_object *gem,
>   {
>   	struct ttm_buffer_object *bo = drm_gem_ttm_of_gem(gem);
>   
> -	return ttm_bo_vmap(bo, map);
> +	return ttm_bo_vmap(bo, 0, gem->size, map);
>   }
>   EXPORT_SYMBOL(drm_gem_ttm_vmap);
>   
> diff --git a/drivers/gpu/drm/drm_gem_vram_helper.c b/drivers/gpu/drm/drm_gem_vram_helper.c
> index 6027584406af6..1670f9a459a9d 100644
> --- a/drivers/gpu/drm/drm_gem_vram_helper.c
> +++ b/drivers/gpu/drm/drm_gem_vram_helper.c
> @@ -398,7 +398,7 @@ int drm_gem_vram_vmap(struct drm_gem_vram_object *gbo, struct iosys_map *map)
>   	 * no mapping present.
>   	 */
>   	if (iosys_map_is_null(&gbo->map)) {
> -		ret = ttm_bo_vmap(&gbo->bo, &gbo->map);
> +		ret = ttm_bo_vmap(&gbo->bo, 0, gbo->bo.base.size, &gbo->map);
>   		if (ret)
>   			return ret;
>   	}
> diff --git a/drivers/gpu/drm/loongson/lsdc_gem.c b/drivers/gpu/drm/loongson/lsdc_gem.c
> index a720d8f532093..f709960c781b9 100644
> --- a/drivers/gpu/drm/loongson/lsdc_gem.c
> +++ b/drivers/gpu/drm/loongson/lsdc_gem.c
> @@ -77,7 +77,7 @@ static int lsdc_gem_object_vmap(struct drm_gem_object *obj, struct iosys_map *ma
>   		return ret;
>   	}
>   
> -	ret = ttm_bo_vmap(tbo, &lbo->map);
> +	ret = ttm_bo_vmap(tbo, 0, tbo->base.size, &lbo->map);
>   	if (ret) {
>   		drm_err(obj->dev, "ttm bo vmap failed\n");
>   		lsdc_bo_unpin(lbo);
> diff --git a/drivers/gpu/drm/qxl/qxl_object.c b/drivers/gpu/drm/qxl/qxl_object.c
> index 5893e27a7ae50..9f06d5e26a32c 100644
> --- a/drivers/gpu/drm/qxl/qxl_object.c
> +++ b/drivers/gpu/drm/qxl/qxl_object.c
> @@ -164,7 +164,7 @@ int qxl_bo_vmap_locked(struct qxl_bo *bo, struct iosys_map *map)
>   		goto out;
>   	}
>   
> -	r = ttm_bo_vmap(&bo->tbo, &bo->map);
> +	r = ttm_bo_vmap(&bo->tbo, 0, bo->tbo.base.size, &bo->map);
>   	if (r) {
>   		qxl_bo_unpin_locked(bo);
>   		return r;
> diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c b/drivers/gpu/drm/ttm/ttm_bo_util.c
> index a9df0deff2deb..31f9772f05dac 100644
> --- a/drivers/gpu/drm/ttm/ttm_bo_util.c
> +++ b/drivers/gpu/drm/ttm/ttm_bo_util.c
> @@ -457,17 +457,23 @@ EXPORT_SYMBOL(ttm_bo_kunmap);
>    * ttm_bo_vmap
>    *
>    * @bo: The buffer object.
> + * @offset: Byte offset into the buffer.
> + * @size: Number of bytes to map.
>    * @map: pointer to a struct iosys_map representing the map.
>    *
>    * Sets up a kernel virtual mapping, using ioremap or vmap to the
>    * data in the buffer object. The parameter @map returns the virtual
>    * address as struct iosys_map. Unmap the buffer with ttm_bo_vunmap().
> + * The address stored in @map will be aligned to the next lower page
> + * boundaries.
>    *
>    * Returns
>    * -ENOMEM: Out of memory.
>    * -EINVAL: Invalid range.
>    */
> -int ttm_bo_vmap(struct ttm_buffer_object *bo, struct iosys_map *map)
> +int ttm_bo_vmap(struct ttm_buffer_object *bo,
> +		unsigned long offset, unsigned long size,
> +		struct iosys_map *map)
>   {
>   	struct ttm_resource *mem = bo->resource;
>   	int ret;
> @@ -483,18 +489,18 @@ int ttm_bo_vmap(struct ttm_buffer_object *bo, struct iosys_map *map)
>   		u16 alloc_flags;
>   
>   		if (mem->bus.addr) {
> -			vaddr_iomem = (void __iomem *)mem->bus.addr;
> +			vaddr_iomem = (u8 __iomem *)mem->bus.addr + offset;
>   			alloc_flags = ttm_bo_map_premapped;
>   		} else if (mem->bus.caching == ttm_write_combined) {
> -			vaddr_iomem = ioremap_wc(mem->bus.offset, bo->base.size);
> +			vaddr_iomem = ioremap_wc(mem->bus.offset + offset, size);
>   			alloc_flags = ttm_bo_map_iomap;
>   #ifdef CONFIG_X86
>   		} else if (mem->bus.caching == ttm_cached) {
> -			vaddr_iomem = ioremap_cache(mem->bus.offset, bo->base.size);
> +			vaddr_iomem = ioremap_cache(mem->bus.offset + offset, size);
>   			alloc_flags = ttm_bo_map_iomap;
>   #endif
>   		} else {
> -			vaddr_iomem = ioremap(mem->bus.offset, bo->base.size);
> +			vaddr_iomem = ioremap(mem->bus.offset + offset, size);
>   			alloc_flags = ttm_bo_map_iomap;
>   		}
>   
> @@ -510,6 +516,9 @@ int ttm_bo_vmap(struct ttm_buffer_object *bo, struct iosys_map *map)
>   			.no_wait_gpu = false
>   		};
>   		struct ttm_tt *ttm = bo->ttm;
> +		unsigned long start_page = offset >> PAGE_SHIFT;
> +		unsigned long aligned_size = size + (offset - (start_page << PAGE_SHIFT));
> +		unsigned long num_pages = DIV_ROUND_UP(aligned_size, PAGE_SIZE);
>   		pgprot_t prot;
>   		void *vaddr;
>   		u16 alloc_flags;
> @@ -523,7 +532,7 @@ int ttm_bo_vmap(struct ttm_buffer_object *bo, struct iosys_map *map)
>   		 * or to make the buffer object look contiguous.
>   		 */
>   		prot = ttm_io_prot(bo, mem, PAGE_KERNEL);
> -		vaddr = vmap(ttm->pages, ttm->num_pages, 0, prot);
> +		vaddr = vmap(ttm->pages + start_page, num_pages, 0, prot);
>   		if (!vaddr)
>   			return -ENOMEM;
>   		alloc_flags = ttm_bo_map_vmap;
> diff --git a/drivers/gpu/drm/xe/xe_lrc.c b/drivers/gpu/drm/xe/xe_lrc.c
> index c1bb85d2e243f..3a68fe6d592ed 100644
> --- a/drivers/gpu/drm/xe/xe_lrc.c
> +++ b/drivers/gpu/drm/xe/xe_lrc.c
> @@ -1595,7 +1595,7 @@ void xe_lrc_snapshot_capture_delayed(struct xe_lrc_snapshot *snapshot)
>   		goto put_bo;
>   
>   	xe_bo_lock(bo, false);
> -	if (!ttm_bo_vmap(&bo->ttm, &src)) {
> +	if (!ttm_bo_vmap(&bo->ttm, 0, bo->ttm.base.size, &src)) {
>   		xe_map_memcpy_from(xe_bo_device(bo),
>   				   snapshot->lrc_snapshot, &src, snapshot->lrc_offset,
>   				   snapshot->lrc_size);
> diff --git a/drivers/gpu/drm/xe/xe_vm.c b/drivers/gpu/drm/xe/xe_vm.c
> index 99bf7412475c0..81306c32f5d09 100644
> --- a/drivers/gpu/drm/xe/xe_vm.c
> +++ b/drivers/gpu/drm/xe/xe_vm.c
> @@ -3485,7 +3485,7 @@ void xe_vm_snapshot_capture_delayed(struct xe_vm_snapshot *snap)
>   
>   		if (bo) {
>   			xe_bo_lock(bo, false);
> -			err = ttm_bo_vmap(&bo->ttm, &src);
> +			err = ttm_bo_vmap(&bo->ttm, 0, bo->ttm.base.size, &src);
>   			if (!err) {
>   				xe_map_memcpy_from(xe_bo_device(bo),
>   						   snap->snap[i].data,
> diff --git a/include/drm/ttm/ttm_bo.h b/include/drm/ttm/ttm_bo.h
> index 6ccf96c91f3ae..c421ffe3563b1 100644
> --- a/include/drm/ttm/ttm_bo.h
> +++ b/include/drm/ttm/ttm_bo.h
> @@ -375,7 +375,9 @@ int ttm_bo_init_validate(struct ttm_device *bdev, struct ttm_buffer_object *bo,
>   int ttm_bo_kmap(struct ttm_buffer_object *bo, unsigned long start_page,
>   		unsigned long num_pages, struct ttm_bo_kmap_obj *map);
>   void ttm_bo_kunmap(struct ttm_bo_kmap_obj *map);
> -int ttm_bo_vmap(struct ttm_buffer_object *bo, struct iosys_map *map);
> +int ttm_bo_vmap(struct ttm_buffer_object *bo,
> +		unsigned long offset, unsigned long size,
> +		struct iosys_map *map);
>   void ttm_bo_vunmap(struct ttm_buffer_object *bo, struct iosys_map *map);
>   int ttm_bo_mmap_obj(struct vm_area_struct *vma, struct ttm_buffer_object *bo);
>   int ttm_bo_swapout(struct ttm_buffer_object *bo, struct ttm_operation_ctx *ctx,


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

* ✗ Fi.CI.IGT: failure for drm/{ttm,xe}: Improve ttm_bo_vmap() and update xe
  2024-06-14 13:21 [PATCH 0/6] drm/{ttm,xe}: Improve ttm_bo_vmap() and update xe Thomas Zimmermann
                   ` (8 preceding siblings ...)
  2024-06-14 14:32 ` ✓ Fi.CI.BAT: success " Patchwork
@ 2024-06-16 21:28 ` Patchwork
  9 siblings, 0 replies; 16+ messages in thread
From: Patchwork @ 2024-06-16 21:28 UTC (permalink / raw)
  To: Thomas Zimmermann; +Cc: intel-gfx

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

== Series Details ==

Series: drm/{ttm,xe}: Improve ttm_bo_vmap() and update xe
URL   : https://patchwork.freedesktop.org/series/134891/
State : failure

== Summary ==

CI Bug Log - changes from CI_DRM_14943_full -> Patchwork_134891v1_full
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with Patchwork_134891v1_full absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in Patchwork_134891v1_full, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
  to document this new failure mode, which will reduce false positives in CI.

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/index.html

Participating hosts (9 -> 9)
------------------------------

  No changes in participating hosts

Possible new issues
-------------------

  Here are the unknown changes that may have been introduced in Patchwork_134891v1_full:

### IGT changes ###

#### Possible regressions ####

  * igt@i915_pm_freq_api@freq-reset-multiple@gt0:
    - shard-dg2:          NOTRUN -> [INCOMPLETE][1]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-8/igt@i915_pm_freq_api@freq-reset-multiple@gt0.html

  * igt@kms_color@ctm-red-to-blue@pipe-d:
    - shard-tglu:         [PASS][2] -> [ABORT][3]
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14943/shard-tglu-6/igt@kms_color@ctm-red-to-blue@pipe-d.html
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-tglu-9/igt@kms_color@ctm-red-to-blue@pipe-d.html

  * igt@sysfs_preempt_timeout@timeout@ccs0:
    - shard-dg2:          [PASS][4] -> [ABORT][5]
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14943/shard-dg2-7/igt@sysfs_preempt_timeout@timeout@ccs0.html
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-4/igt@sysfs_preempt_timeout@timeout@ccs0.html

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

  Here are the changes found in Patchwork_134891v1_full that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@api_intel_bb@blit-reloc-purge-cache:
    - shard-dg2:          NOTRUN -> [SKIP][6] ([i915#8411])
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-11/igt@api_intel_bb@blit-reloc-purge-cache.html

  * igt@api_intel_bb@crc32:
    - shard-rkl:          NOTRUN -> [SKIP][7] ([i915#6230])
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-3/igt@api_intel_bb@crc32.html

  * igt@device_reset@cold-reset-bound:
    - shard-rkl:          NOTRUN -> [SKIP][8] ([i915#11078])
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-5/igt@device_reset@cold-reset-bound.html

  * igt@drm_fdinfo@busy@vcs1:
    - shard-dg1:          NOTRUN -> [SKIP][9] ([i915#8414]) +6 other tests skip
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-16/igt@drm_fdinfo@busy@vcs1.html

  * igt@drm_fdinfo@most-busy-check-all@bcs0:
    - shard-dg2:          NOTRUN -> [SKIP][10] ([i915#8414]) +23 other tests skip
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-8/igt@drm_fdinfo@most-busy-check-all@bcs0.html

  * igt@drm_fdinfo@most-busy-check-all@rcs0:
    - shard-rkl:          [PASS][11] -> [FAIL][12] ([i915#7742])
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14943/shard-rkl-6/igt@drm_fdinfo@most-busy-check-all@rcs0.html
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-2/igt@drm_fdinfo@most-busy-check-all@rcs0.html

  * igt@drm_fdinfo@most-busy-idle-check-all@rcs0:
    - shard-rkl:          NOTRUN -> [FAIL][13] ([i915#7742])
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-3/igt@drm_fdinfo@most-busy-idle-check-all@rcs0.html

  * igt@gem_bad_reloc@negative-reloc-lut:
    - shard-dg1:          NOTRUN -> [SKIP][14] ([i915#3281]) +10 other tests skip
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-18/igt@gem_bad_reloc@negative-reloc-lut.html

  * igt@gem_basic@multigpu-create-close:
    - shard-dg1:          NOTRUN -> [SKIP][15] ([i915#7697])
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-13/igt@gem_basic@multigpu-create-close.html
    - shard-tglu:         NOTRUN -> [SKIP][16] ([i915#7697])
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-tglu-8/igt@gem_basic@multigpu-create-close.html

  * igt@gem_caching@writes:
    - shard-mtlp:         NOTRUN -> [SKIP][17] ([i915#4873])
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-mtlp-4/igt@gem_caching@writes.html

  * igt@gem_ccs@block-multicopy-compressed:
    - shard-rkl:          NOTRUN -> [SKIP][18] ([i915#9323])
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-5/igt@gem_ccs@block-multicopy-compressed.html

  * igt@gem_ccs@ctrl-surf-copy:
    - shard-rkl:          NOTRUN -> [SKIP][19] ([i915#3555] / [i915#9323])
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-3/igt@gem_ccs@ctrl-surf-copy.html

  * igt@gem_ccs@ctrl-surf-copy-new-ctx:
    - shard-tglu:         NOTRUN -> [SKIP][20] ([i915#9323])
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-tglu-3/igt@gem_ccs@ctrl-surf-copy-new-ctx.html

  * igt@gem_ccs@suspend-resume:
    - shard-dg1:          NOTRUN -> [SKIP][21] ([i915#9323])
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-16/igt@gem_ccs@suspend-resume.html

  * igt@gem_create@create-ext-set-pat:
    - shard-tglu:         NOTRUN -> [SKIP][22] ([i915#8562])
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-tglu-3/igt@gem_create@create-ext-set-pat.html

  * igt@gem_ctx_freq@sysfs@gt0:
    - shard-dg2:          NOTRUN -> [FAIL][23] ([i915#9561])
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-6/igt@gem_ctx_freq@sysfs@gt0.html

  * igt@gem_ctx_persistence@hang:
    - shard-dg2:          NOTRUN -> [SKIP][24] ([i915#8555]) +1 other test skip
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-8/igt@gem_ctx_persistence@hang.html

  * igt@gem_ctx_sseu@invalid-args:
    - shard-dg1:          NOTRUN -> [SKIP][25] ([i915#280])
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-16/igt@gem_ctx_sseu@invalid-args.html

  * igt@gem_ctx_sseu@invalid-sseu:
    - shard-rkl:          NOTRUN -> [SKIP][26] ([i915#280])
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-4/igt@gem_ctx_sseu@invalid-sseu.html

  * igt@gem_eio@kms:
    - shard-dg2:          [PASS][27] -> [FAIL][28] ([i915#5784])
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14943/shard-dg2-8/igt@gem_eio@kms.html
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-10/igt@gem_eio@kms.html
    - shard-dg1:          NOTRUN -> [FAIL][29] ([i915#5784])
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-18/igt@gem_eio@kms.html

  * igt@gem_eio@unwedge-stress:
    - shard-dg1:          [PASS][30] -> [FAIL][31] ([i915#5784])
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14943/shard-dg1-15/igt@gem_eio@unwedge-stress.html
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-13/igt@gem_eio@unwedge-stress.html

  * igt@gem_exec_balancer@bonded-dual:
    - shard-dg2:          NOTRUN -> [SKIP][32] ([i915#4771]) +1 other test skip
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-6/igt@gem_exec_balancer@bonded-dual.html

  * igt@gem_exec_balancer@bonded-semaphore:
    - shard-dg1:          NOTRUN -> [SKIP][33] ([i915#4812])
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-13/igt@gem_exec_balancer@bonded-semaphore.html

  * igt@gem_exec_balancer@bonded-true-hang:
    - shard-dg2:          NOTRUN -> [SKIP][34] ([i915#4812]) +2 other tests skip
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-8/igt@gem_exec_balancer@bonded-true-hang.html

  * igt@gem_exec_balancer@invalid-bonds:
    - shard-dg2:          NOTRUN -> [SKIP][35] ([i915#4036])
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-11/igt@gem_exec_balancer@invalid-bonds.html

  * igt@gem_exec_balancer@parallel-balancer:
    - shard-rkl:          NOTRUN -> [SKIP][36] ([i915#4525]) +1 other test skip
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-3/igt@gem_exec_balancer@parallel-balancer.html

  * igt@gem_exec_capture@capture-invisible@smem0:
    - shard-glk:          NOTRUN -> [SKIP][37] ([i915#6334])
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-glk8/igt@gem_exec_capture@capture-invisible@smem0.html

  * igt@gem_exec_capture@capture-recoverable:
    - shard-tglu:         NOTRUN -> [SKIP][38] ([i915#6344])
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-tglu-3/igt@gem_exec_capture@capture-recoverable.html

  * igt@gem_exec_fair@basic-flow:
    - shard-dg2:          NOTRUN -> [SKIP][39] ([i915#3539] / [i915#4852]) +3 other tests skip
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-11/igt@gem_exec_fair@basic-flow.html

  * igt@gem_exec_fair@basic-none-rrul@rcs0:
    - shard-glk:          NOTRUN -> [FAIL][40] ([i915#2842])
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-glk1/igt@gem_exec_fair@basic-none-rrul@rcs0.html

  * igt@gem_exec_fair@basic-none@bcs0:
    - shard-rkl:          NOTRUN -> [FAIL][41] ([i915#2842]) +5 other tests fail
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-3/igt@gem_exec_fair@basic-none@bcs0.html

  * igt@gem_exec_fair@basic-pace-share:
    - shard-dg1:          NOTRUN -> [SKIP][42] ([i915#3539] / [i915#4852]) +3 other tests skip
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-16/igt@gem_exec_fair@basic-pace-share.html

  * igt@gem_exec_fair@basic-pace-solo:
    - shard-dg2:          NOTRUN -> [SKIP][43] ([i915#3539]) +1 other test skip
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-6/igt@gem_exec_fair@basic-pace-solo.html

  * igt@gem_exec_fair@basic-pace@rcs0:
    - shard-rkl:          [PASS][44] -> [FAIL][45] ([i915#2842])
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14943/shard-rkl-4/igt@gem_exec_fair@basic-pace@rcs0.html
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-5/igt@gem_exec_fair@basic-pace@rcs0.html

  * igt@gem_exec_flush@basic-uc-prw-default:
    - shard-dg1:          NOTRUN -> [SKIP][46] ([i915#3539]) +1 other test skip
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-16/igt@gem_exec_flush@basic-uc-prw-default.html

  * igt@gem_exec_reloc@basic-gtt:
    - shard-dg2:          NOTRUN -> [SKIP][47] ([i915#3281]) +12 other tests skip
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-8/igt@gem_exec_reloc@basic-gtt.html

  * igt@gem_exec_reloc@basic-wc-read:
    - shard-mtlp:         NOTRUN -> [SKIP][48] ([i915#3281])
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-mtlp-4/igt@gem_exec_reloc@basic-wc-read.html

  * igt@gem_exec_reloc@basic-wc-read-noreloc:
    - shard-rkl:          NOTRUN -> [SKIP][49] ([i915#3281]) +13 other tests skip
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-4/igt@gem_exec_reloc@basic-wc-read-noreloc.html

  * igt@gem_fenced_exec_thrash@no-spare-fences-busy:
    - shard-dg1:          NOTRUN -> [SKIP][50] ([i915#4860]) +2 other tests skip
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-16/igt@gem_fenced_exec_thrash@no-spare-fences-busy.html

  * igt@gem_lmem_swapping@heavy-verify-multi@lmem0:
    - shard-dg2:          NOTRUN -> [FAIL][51] ([i915#10378])
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-2/igt@gem_lmem_swapping@heavy-verify-multi@lmem0.html

  * igt@gem_lmem_swapping@parallel-random-verify:
    - shard-rkl:          NOTRUN -> [SKIP][52] ([i915#4613]) +6 other tests skip
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-3/igt@gem_lmem_swapping@parallel-random-verify.html

  * igt@gem_lmem_swapping@parallel-random-verify-ccs:
    - shard-mtlp:         NOTRUN -> [SKIP][53] ([i915#4613]) +1 other test skip
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-mtlp-7/igt@gem_lmem_swapping@parallel-random-verify-ccs.html

  * igt@gem_lmem_swapping@random-engines:
    - shard-glk:          NOTRUN -> [SKIP][54] ([i915#4613]) +2 other tests skip
   [54]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-glk1/igt@gem_lmem_swapping@random-engines.html

  * igt@gem_lmem_swapping@verify-ccs:
    - shard-tglu:         NOTRUN -> [SKIP][55] ([i915#4613]) +2 other tests skip
   [55]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-tglu-3/igt@gem_lmem_swapping@verify-ccs.html

  * igt@gem_media_vme:
    - shard-dg1:          NOTRUN -> [SKIP][56] ([i915#284])
   [56]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-16/igt@gem_media_vme.html

  * igt@gem_mmap@bad-offset:
    - shard-dg1:          NOTRUN -> [SKIP][57] ([i915#4083]) +3 other tests skip
   [57]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-16/igt@gem_mmap@bad-offset.html

  * igt@gem_mmap_gtt@basic-small-bo:
    - shard-dg2:          NOTRUN -> [SKIP][58] ([i915#4077]) +12 other tests skip
   [58]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-11/igt@gem_mmap_gtt@basic-small-bo.html

  * igt@gem_mmap_gtt@basic-small-bo-tiledy:
    - shard-mtlp:         NOTRUN -> [SKIP][59] ([i915#4077])
   [59]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-mtlp-4/igt@gem_mmap_gtt@basic-small-bo-tiledy.html

  * igt@gem_mmap_gtt@basic-small-copy:
    - shard-dg1:          NOTRUN -> [SKIP][60] ([i915#4077]) +11 other tests skip
   [60]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-13/igt@gem_mmap_gtt@basic-small-copy.html

  * igt@gem_mmap_wc@invalid-flags:
    - shard-dg2:          NOTRUN -> [SKIP][61] ([i915#4083]) +7 other tests skip
   [61]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-8/igt@gem_mmap_wc@invalid-flags.html

  * igt@gem_partial_pwrite_pread@write:
    - shard-dg1:          NOTRUN -> [SKIP][62] ([i915#3282]) +3 other tests skip
   [62]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-16/igt@gem_partial_pwrite_pread@write.html

  * igt@gem_pwrite@basic-exhaustion:
    - shard-glk:          NOTRUN -> [WARN][63] ([i915#2658])
   [63]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-glk1/igt@gem_pwrite@basic-exhaustion.html

  * igt@gem_pxp@dmabuf-shared-protected-dst-is-context-refcounted:
    - shard-dg2:          NOTRUN -> [SKIP][64] ([i915#4270]) +5 other tests skip
   [64]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-11/igt@gem_pxp@dmabuf-shared-protected-dst-is-context-refcounted.html

  * igt@gem_pxp@protected-encrypted-src-copy-not-readible:
    - shard-rkl:          NOTRUN -> [SKIP][65] ([i915#4270]) +4 other tests skip
   [65]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-2/igt@gem_pxp@protected-encrypted-src-copy-not-readible.html

  * igt@gem_pxp@verify-pxp-stale-buf-execution:
    - shard-tglu:         NOTRUN -> [SKIP][66] ([i915#4270])
   [66]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-tglu-3/igt@gem_pxp@verify-pxp-stale-buf-execution.html

  * igt@gem_pxp@verify-pxp-stale-ctx-execution:
    - shard-dg1:          NOTRUN -> [SKIP][67] ([i915#4270]) +3 other tests skip
   [67]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-16/igt@gem_pxp@verify-pxp-stale-ctx-execution.html

  * igt@gem_readwrite@new-obj:
    - shard-dg2:          NOTRUN -> [SKIP][68] ([i915#3282]) +2 other tests skip
   [68]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-11/igt@gem_readwrite@new-obj.html

  * igt@gem_render_copy@yf-tiled-to-vebox-yf-tiled:
    - shard-dg2:          NOTRUN -> [SKIP][69] ([i915#5190] / [i915#8428]) +4 other tests skip
   [69]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-8/igt@gem_render_copy@yf-tiled-to-vebox-yf-tiled.html

  * igt@gem_set_tiling_vs_blt@tiled-to-tiled:
    - shard-rkl:          NOTRUN -> [SKIP][70] ([i915#8411]) +1 other test skip
   [70]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-2/igt@gem_set_tiling_vs_blt@tiled-to-tiled.html
    - shard-dg1:          NOTRUN -> [SKIP][71] ([i915#4079])
   [71]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-18/igt@gem_set_tiling_vs_blt@tiled-to-tiled.html

  * igt@gem_set_tiling_vs_pwrite:
    - shard-rkl:          NOTRUN -> [SKIP][72] ([i915#3282]) +6 other tests skip
   [72]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-3/igt@gem_set_tiling_vs_pwrite.html

  * igt@gem_spin_batch@spin-all-new:
    - shard-dg2:          NOTRUN -> [FAIL][73] ([i915#5889])
   [73]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-6/igt@gem_spin_batch@spin-all-new.html

  * igt@gem_userptr_blits@readonly-pwrite-unsync:
    - shard-tglu:         NOTRUN -> [SKIP][74] ([i915#3297])
   [74]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-tglu-8/igt@gem_userptr_blits@readonly-pwrite-unsync.html
    - shard-dg1:          NOTRUN -> [SKIP][75] ([i915#3297]) +1 other test skip
   [75]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-13/igt@gem_userptr_blits@readonly-pwrite-unsync.html

  * igt@gen7_exec_parse@batch-without-end:
    - shard-mtlp:         NOTRUN -> [SKIP][76]
   [76]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-mtlp-4/igt@gen7_exec_parse@batch-without-end.html

  * igt@gen7_exec_parse@bitmasks:
    - shard-dg2:          NOTRUN -> [SKIP][77] +22 other tests skip
   [77]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-8/igt@gen7_exec_parse@bitmasks.html

  * igt@gen9_exec_parse@allowed-all:
    - shard-dg2:          NOTRUN -> [SKIP][78] ([i915#2856]) +3 other tests skip
   [78]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-8/igt@gen9_exec_parse@allowed-all.html

  * igt@gen9_exec_parse@bb-large:
    - shard-tglu:         NOTRUN -> [SKIP][79] ([i915#2527] / [i915#2856]) +1 other test skip
   [79]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-tglu-3/igt@gen9_exec_parse@bb-large.html

  * igt@gen9_exec_parse@bb-start-far:
    - shard-rkl:          NOTRUN -> [SKIP][80] ([i915#2527]) +4 other tests skip
   [80]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-2/igt@gen9_exec_parse@bb-start-far.html
    - shard-dg1:          NOTRUN -> [SKIP][81] ([i915#2527]) +1 other test skip
   [81]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-18/igt@gen9_exec_parse@bb-start-far.html

  * igt@i915_fb_tiling:
    - shard-dg1:          NOTRUN -> [SKIP][82] ([i915#4881])
   [82]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-18/igt@i915_fb_tiling.html

  * igt@i915_module_load@load:
    - shard-tglu:         NOTRUN -> [SKIP][83] ([i915#6227])
   [83]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-tglu-3/igt@i915_module_load@load.html

  * igt@i915_module_load@reload-with-fault-injection:
    - shard-snb:          [PASS][84] -> [ABORT][85] ([i915#9820])
   [84]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14943/shard-snb2/igt@i915_module_load@reload-with-fault-injection.html
   [85]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-snb7/igt@i915_module_load@reload-with-fault-injection.html

  * igt@i915_pm_freq_api@freq-basic-api:
    - shard-rkl:          NOTRUN -> [SKIP][86] ([i915#8399])
   [86]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-4/igt@i915_pm_freq_api@freq-basic-api.html

  * igt@i915_pm_freq_mult@media-freq@gt0:
    - shard-rkl:          NOTRUN -> [SKIP][87] ([i915#6590])
   [87]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-3/igt@i915_pm_freq_mult@media-freq@gt0.html

  * igt@i915_pm_rc6_residency@rc6-idle@gt0-rcs0:
    - shard-dg1:          [PASS][88] -> [FAIL][89] ([i915#3591])
   [88]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14943/shard-dg1-15/igt@i915_pm_rc6_residency@rc6-idle@gt0-rcs0.html
   [89]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-14/igt@i915_pm_rc6_residency@rc6-idle@gt0-rcs0.html

  * igt@i915_pm_rps@basic-api:
    - shard-dg1:          NOTRUN -> [SKIP][90] ([i915#6621])
   [90]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-18/igt@i915_pm_rps@basic-api.html

  * igt@i915_pm_rps@min-max-config-idle:
    - shard-dg2:          NOTRUN -> [SKIP][91] ([i915#6621])
   [91]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-6/igt@i915_pm_rps@min-max-config-idle.html

  * igt@i915_pm_rps@thresholds-park@gt0:
    - shard-dg1:          NOTRUN -> [SKIP][92] ([i915#8925]) +1 other test skip
   [92]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-18/igt@i915_pm_rps@thresholds-park@gt0.html

  * igt@i915_query@test-query-geometry-subslices:
    - shard-rkl:          NOTRUN -> [SKIP][93] ([i915#5723])
   [93]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-3/igt@i915_query@test-query-geometry-subslices.html

  * igt@kms_addfb_basic@addfb25-framebuffer-vs-set-tiling:
    - shard-dg2:          NOTRUN -> [SKIP][94] ([i915#4212])
   [94]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-6/igt@kms_addfb_basic@addfb25-framebuffer-vs-set-tiling.html

  * igt@kms_addfb_basic@basic-x-tiled-legacy:
    - shard-mtlp:         NOTRUN -> [SKIP][95] ([i915#4212])
   [95]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-mtlp-4/igt@kms_addfb_basic@basic-x-tiled-legacy.html

  * igt@kms_addfb_basic@clobberred-modifier:
    - shard-dg1:          NOTRUN -> [SKIP][96] ([i915#4212])
   [96]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-18/igt@kms_addfb_basic@clobberred-modifier.html

  * igt@kms_addfb_basic@invalid-smem-bo-on-discrete:
    - shard-tglu:         NOTRUN -> [SKIP][97] ([i915#3826])
   [97]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-tglu-8/igt@kms_addfb_basic@invalid-smem-bo-on-discrete.html

  * igt@kms_async_flips@async-flip-with-page-flip-events@pipe-a-hdmi-a-1-y-rc-ccs-cc:
    - shard-rkl:          NOTRUN -> [SKIP][98] ([i915#8709]) +3 other tests skip
   [98]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-4/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-a-hdmi-a-1-y-rc-ccs-cc.html

  * igt@kms_async_flips@async-flip-with-page-flip-events@pipe-d-hdmi-a-3-4-mc-ccs:
    - shard-dg2:          NOTRUN -> [SKIP][99] ([i915#8709]) +11 other tests skip
   [99]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-6/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-d-hdmi-a-3-4-mc-ccs.html

  * igt@kms_atomic@plane-primary-overlay-mutable-zpos:
    - shard-rkl:          NOTRUN -> [SKIP][100] ([i915#9531])
   [100]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-4/igt@kms_atomic@plane-primary-overlay-mutable-zpos.html

  * igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels:
    - shard-glk:          NOTRUN -> [SKIP][101] ([i915#1769])
   [101]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-glk8/igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels.html

  * igt@kms_atomic_transition@plane-all-modeset-transition-internal-panels:
    - shard-rkl:          NOTRUN -> [SKIP][102] ([i915#1769] / [i915#3555])
   [102]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-5/igt@kms_atomic_transition@plane-all-modeset-transition-internal-panels.html

  * igt@kms_big_fb@4-tiled-8bpp-rotate-0:
    - shard-tglu:         NOTRUN -> [SKIP][103] ([i915#5286])
   [103]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-tglu-8/igt@kms_big_fb@4-tiled-8bpp-rotate-0.html

  * igt@kms_big_fb@4-tiled-8bpp-rotate-90:
    - shard-rkl:          NOTRUN -> [SKIP][104] ([i915#5286]) +8 other tests skip
   [104]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-2/igt@kms_big_fb@4-tiled-8bpp-rotate-90.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-async-flip:
    - shard-dg1:          NOTRUN -> [SKIP][105] ([i915#4538] / [i915#5286]) +5 other tests skip
   [105]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-13/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html

  * igt@kms_big_fb@y-tiled-64bpp-rotate-270:
    - shard-rkl:          NOTRUN -> [SKIP][106] ([i915#3638]) +2 other tests skip
   [106]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-2/igt@kms_big_fb@y-tiled-64bpp-rotate-270.html
    - shard-dg1:          NOTRUN -> [SKIP][107] ([i915#3638]) +2 other tests skip
   [107]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-18/igt@kms_big_fb@y-tiled-64bpp-rotate-270.html

  * igt@kms_big_fb@y-tiled-addfb-size-overflow:
    - shard-dg2:          NOTRUN -> [SKIP][108] ([i915#5190]) +4 other tests skip
   [108]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-6/igt@kms_big_fb@y-tiled-addfb-size-overflow.html

  * igt@kms_big_fb@yf-tiled-32bpp-rotate-270:
    - shard-dg2:          NOTRUN -> [SKIP][109] ([i915#4538] / [i915#5190]) +11 other tests skip
   [109]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-8/igt@kms_big_fb@yf-tiled-32bpp-rotate-270.html

  * igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-0:
    - shard-dg1:          NOTRUN -> [SKIP][110] ([i915#4538]) +3 other tests skip
   [110]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-16/igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-0.html

  * igt@kms_big_joiner@basic:
    - shard-dg2:          NOTRUN -> [SKIP][111] ([i915#10656])
   [111]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-8/igt@kms_big_joiner@basic.html

  * igt@kms_big_joiner@invalid-modeset-force-joiner:
    - shard-dg1:          NOTRUN -> [SKIP][112] ([i915#10656])
   [112]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-16/igt@kms_big_joiner@invalid-modeset-force-joiner.html

  * igt@kms_ccs@bad-rotation-90-4-tiled-xe2-ccs:
    - shard-dg1:          NOTRUN -> [SKIP][113] ([i915#10278]) +1 other test skip
   [113]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-13/igt@kms_ccs@bad-rotation-90-4-tiled-xe2-ccs.html
    - shard-tglu:         NOTRUN -> [SKIP][114] ([i915#10278])
   [114]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-tglu-8/igt@kms_ccs@bad-rotation-90-4-tiled-xe2-ccs.html

  * igt@kms_ccs@ccs-on-another-bo-y-tiled-ccs@pipe-b-hdmi-a-1:
    - shard-dg2:          NOTRUN -> [SKIP][115] ([i915#10307] / [i915#6095]) +152 other tests skip
   [115]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-8/igt@kms_ccs@ccs-on-another-bo-y-tiled-ccs@pipe-b-hdmi-a-1.html

  * igt@kms_ccs@ccs-on-another-bo-y-tiled-gen12-mc-ccs@pipe-b-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][116] ([i915#6095]) +3 other tests skip
   [116]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-mtlp-4/igt@kms_ccs@ccs-on-another-bo-y-tiled-gen12-mc-ccs@pipe-b-edp-1.html

  * igt@kms_ccs@crc-primary-basic-4-tiled-mtl-rc-ccs-cc@pipe-b-hdmi-a-1:
    - shard-tglu:         NOTRUN -> [SKIP][117] ([i915#6095]) +15 other tests skip
   [117]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-tglu-3/igt@kms_ccs@crc-primary-basic-4-tiled-mtl-rc-ccs-cc@pipe-b-hdmi-a-1.html

  * igt@kms_ccs@crc-primary-rotation-180-4-tiled-dg2-mc-ccs@pipe-b-hdmi-a-1:
    - shard-rkl:          NOTRUN -> [SKIP][118] ([i915#6095]) +61 other tests skip
   [118]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-5/igt@kms_ccs@crc-primary-rotation-180-4-tiled-dg2-mc-ccs@pipe-b-hdmi-a-1.html

  * igt@kms_ccs@crc-primary-rotation-180-yf-tiled-ccs@pipe-a-hdmi-a-4:
    - shard-dg1:          NOTRUN -> [SKIP][119] ([i915#6095]) +47 other tests skip
   [119]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-18/igt@kms_ccs@crc-primary-rotation-180-yf-tiled-ccs@pipe-a-hdmi-a-4.html

  * igt@kms_ccs@crc-sprite-planes-basic-4-tiled-xe2-ccs:
    - shard-dg2:          NOTRUN -> [SKIP][120] ([i915#10278])
   [120]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-11/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-xe2-ccs.html

  * igt@kms_ccs@missing-ccs-buffer-y-tiled-gen12-rc-ccs@pipe-a-hdmi-a-1:
    - shard-glk:          NOTRUN -> [SKIP][121] +220 other tests skip
   [121]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-glk6/igt@kms_ccs@missing-ccs-buffer-y-tiled-gen12-rc-ccs@pipe-a-hdmi-a-1.html

  * igt@kms_ccs@random-ccs-data-yf-tiled-ccs@pipe-d-hdmi-a-1:
    - shard-dg2:          NOTRUN -> [SKIP][122] ([i915#10307] / [i915#10434] / [i915#6095]) +2 other tests skip
   [122]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-4/igt@kms_ccs@random-ccs-data-yf-tiled-ccs@pipe-d-hdmi-a-1.html

  * igt@kms_cdclk@mode-transition-all-outputs:
    - shard-dg1:          NOTRUN -> [SKIP][123] ([i915#3742]) +1 other test skip
   [123]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-13/igt@kms_cdclk@mode-transition-all-outputs.html
    - shard-tglu:         NOTRUN -> [SKIP][124] ([i915#3742])
   [124]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-tglu-8/igt@kms_cdclk@mode-transition-all-outputs.html

  * igt@kms_chamelium_audio@dp-audio-edid:
    - shard-dg2:          NOTRUN -> [SKIP][125] ([i915#7828]) +11 other tests skip
   [125]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-8/igt@kms_chamelium_audio@dp-audio-edid.html

  * igt@kms_chamelium_edid@hdmi-edid-change-during-suspend:
    - shard-rkl:          NOTRUN -> [SKIP][126] ([i915#7828]) +11 other tests skip
   [126]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-3/igt@kms_chamelium_edid@hdmi-edid-change-during-suspend.html

  * igt@kms_chamelium_frames@hdmi-crc-single:
    - shard-dg1:          NOTRUN -> [SKIP][127] ([i915#7828]) +7 other tests skip
   [127]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-16/igt@kms_chamelium_frames@hdmi-crc-single.html

  * igt@kms_chamelium_hpd@dp-hpd-after-suspend:
    - shard-mtlp:         NOTRUN -> [SKIP][128] ([i915#7828])
   [128]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-mtlp-4/igt@kms_chamelium_hpd@dp-hpd-after-suspend.html

  * igt@kms_chamelium_hpd@dp-hpd-fast:
    - shard-tglu:         NOTRUN -> [SKIP][129] ([i915#7828]) +3 other tests skip
   [129]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-tglu-8/igt@kms_chamelium_hpd@dp-hpd-fast.html

  * igt@kms_content_protection@content-type-change:
    - shard-tglu:         NOTRUN -> [SKIP][130] ([i915#6944] / [i915#9424])
   [130]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-tglu-8/igt@kms_content_protection@content-type-change.html
    - shard-dg1:          NOTRUN -> [SKIP][131] ([i915#9424])
   [131]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-13/igt@kms_content_protection@content-type-change.html

  * igt@kms_content_protection@dp-mst-type-0:
    - shard-dg2:          NOTRUN -> [SKIP][132] ([i915#3299])
   [132]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-11/igt@kms_content_protection@dp-mst-type-0.html

  * igt@kms_content_protection@lic-type-1:
    - shard-dg2:          NOTRUN -> [SKIP][133] ([i915#9424])
   [133]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-8/igt@kms_content_protection@lic-type-1.html

  * igt@kms_content_protection@type1:
    - shard-rkl:          NOTRUN -> [SKIP][134] ([i915#7118] / [i915#9424]) +1 other test skip
   [134]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-2/igt@kms_content_protection@type1.html
    - shard-dg1:          NOTRUN -> [SKIP][135] ([i915#7116] / [i915#9424])
   [135]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-18/igt@kms_content_protection@type1.html

  * igt@kms_cursor_crc@cursor-onscreen-512x512:
    - shard-dg1:          NOTRUN -> [SKIP][136] ([i915#3359])
   [136]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-16/igt@kms_cursor_crc@cursor-onscreen-512x512.html

  * igt@kms_cursor_crc@cursor-random-512x170:
    - shard-dg2:          NOTRUN -> [SKIP][137] ([i915#3359]) +1 other test skip
   [137]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-6/igt@kms_cursor_crc@cursor-random-512x170.html
    - shard-rkl:          NOTRUN -> [SKIP][138] ([i915#3359]) +1 other test skip
   [138]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-4/igt@kms_cursor_crc@cursor-random-512x170.html

  * igt@kms_cursor_crc@cursor-rapid-movement-32x10:
    - shard-rkl:          NOTRUN -> [SKIP][139] ([i915#3555]) +11 other tests skip
   [139]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-3/igt@kms_cursor_crc@cursor-rapid-movement-32x10.html

  * igt@kms_cursor_crc@cursor-rapid-movement-32x32:
    - shard-dg1:          NOTRUN -> [SKIP][140] ([i915#3555]) +6 other tests skip
   [140]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-13/igt@kms_cursor_crc@cursor-rapid-movement-32x32.html

  * igt@kms_cursor_crc@cursor-sliding-32x10:
    - shard-mtlp:         NOTRUN -> [SKIP][141] ([i915#3555] / [i915#8814])
   [141]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-mtlp-4/igt@kms_cursor_crc@cursor-sliding-32x10.html

  * igt@kms_cursor_crc@cursor-sliding-32x32:
    - shard-tglu:         NOTRUN -> [SKIP][142] ([i915#3555]) +2 other tests skip
   [142]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-tglu-3/igt@kms_cursor_crc@cursor-sliding-32x32.html

  * igt@kms_cursor_legacy@2x-flip-vs-cursor-legacy:
    - shard-rkl:          NOTRUN -> [SKIP][143] +46 other tests skip
   [143]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-5/igt@kms_cursor_legacy@2x-flip-vs-cursor-legacy.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy:
    - shard-rkl:          NOTRUN -> [SKIP][144] ([i915#4103]) +1 other test skip
   [144]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-4/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html

  * igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions-varying-size:
    - shard-dg1:          NOTRUN -> [SKIP][145] ([i915#4103] / [i915#4213]) +1 other test skip
   [145]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-13/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions-varying-size.html
    - shard-tglu:         NOTRUN -> [SKIP][146] ([i915#4103])
   [146]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-tglu-8/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions-varying-size.html

  * igt@kms_dirtyfb@psr-dirtyfb-ioctl:
    - shard-rkl:          NOTRUN -> [SKIP][147] ([i915#9723]) +1 other test skip
   [147]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-3/igt@kms_dirtyfb@psr-dirtyfb-ioctl.html
    - shard-dg2:          NOTRUN -> [SKIP][148] ([i915#9833])
   [148]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-2/igt@kms_dirtyfb@psr-dirtyfb-ioctl.html

  * igt@kms_display_modes@mst-extended-mode-negative:
    - shard-dg2:          NOTRUN -> [SKIP][149] ([i915#8588])
   [149]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-8/igt@kms_display_modes@mst-extended-mode-negative.html

  * igt@kms_draw_crc@draw-method-mmap-wc:
    - shard-dg1:          NOTRUN -> [SKIP][150] ([i915#8812])
   [150]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-16/igt@kms_draw_crc@draw-method-mmap-wc.html

  * igt@kms_dsc@dsc-fractional-bpp:
    - shard-dg2:          NOTRUN -> [SKIP][151] ([i915#3840] / [i915#9688])
   [151]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-2/igt@kms_dsc@dsc-fractional-bpp.html
    - shard-rkl:          NOTRUN -> [SKIP][152] ([i915#3840])
   [152]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-3/igt@kms_dsc@dsc-fractional-bpp.html

  * igt@kms_dsc@dsc-with-formats:
    - shard-tglu:         NOTRUN -> [SKIP][153] ([i915#3555] / [i915#3840])
   [153]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-tglu-3/igt@kms_dsc@dsc-with-formats.html

  * igt@kms_dsc@dsc-with-output-formats:
    - shard-rkl:          NOTRUN -> [SKIP][154] ([i915#3555] / [i915#3840])
   [154]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-3/igt@kms_dsc@dsc-with-output-formats.html

  * igt@kms_feature_discovery@chamelium:
    - shard-rkl:          NOTRUN -> [SKIP][155] ([i915#4854])
   [155]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-4/igt@kms_feature_discovery@chamelium.html

  * igt@kms_feature_discovery@display-2x:
    - shard-dg1:          NOTRUN -> [SKIP][156] ([i915#1839])
   [156]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-16/igt@kms_feature_discovery@display-2x.html

  * igt@kms_feature_discovery@display-3x:
    - shard-dg2:          NOTRUN -> [SKIP][157] ([i915#1839])
   [157]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-11/igt@kms_feature_discovery@display-3x.html

  * igt@kms_feature_discovery@psr1:
    - shard-rkl:          NOTRUN -> [SKIP][158] ([i915#658])
   [158]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-2/igt@kms_feature_discovery@psr1.html

  * igt@kms_feature_discovery@psr2:
    - shard-dg1:          NOTRUN -> [SKIP][159] ([i915#658]) +1 other test skip
   [159]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-13/igt@kms_feature_discovery@psr2.html
    - shard-tglu:         NOTRUN -> [SKIP][160] ([i915#658])
   [160]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-tglu-8/igt@kms_feature_discovery@psr2.html

  * igt@kms_flip@2x-plain-flip-fb-recreate-interruptible:
    - shard-dg1:          NOTRUN -> [SKIP][161] ([i915#9934]) +7 other tests skip
   [161]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-16/igt@kms_flip@2x-plain-flip-fb-recreate-interruptible.html

  * igt@kms_flip@2x-plain-flip-interruptible:
    - shard-tglu:         NOTRUN -> [SKIP][162] ([i915#3637]) +2 other tests skip
   [162]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-tglu-8/igt@kms_flip@2x-plain-flip-interruptible.html

  * igt@kms_flip@2x-plain-flip-ts-check:
    - shard-tglu:         NOTRUN -> [SKIP][163] ([i915#3637] / [i915#3966])
   [163]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-tglu-8/igt@kms_flip@2x-plain-flip-ts-check.html

  * igt@kms_flip@flip-vs-absolute-wf_vblank@a-hdmi-a1:
    - shard-rkl:          [PASS][164] -> [FAIL][165] ([i915#2122])
   [164]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14943/shard-rkl-4/igt@kms_flip@flip-vs-absolute-wf_vblank@a-hdmi-a1.html
   [165]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-5/igt@kms_flip@flip-vs-absolute-wf_vblank@a-hdmi-a1.html

  * igt@kms_flip@flip-vs-fences-interruptible:
    - shard-dg2:          NOTRUN -> [SKIP][166] ([i915#8381])
   [166]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-8/igt@kms_flip@flip-vs-fences-interruptible.html

  * igt@kms_flip@plain-flip-ts-check@c-hdmi-a2:
    - shard-dg2:          NOTRUN -> [FAIL][167] ([i915#2122]) +3 other tests fail
   [167]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-2/igt@kms_flip@plain-flip-ts-check@c-hdmi-a2.html

  * igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-32bpp-yftileccs-upscaling@pipe-a-valid-mode:
    - shard-dg1:          NOTRUN -> [SKIP][168] ([i915#2587] / [i915#2672]) +3 other tests skip
   [168]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-18/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-32bpp-yftileccs-upscaling@pipe-a-valid-mode.html

  * igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-upscaling@pipe-a-valid-mode:
    - shard-rkl:          NOTRUN -> [SKIP][169] ([i915#2672]) +3 other tests skip
   [169]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-3/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-upscaling@pipe-a-valid-mode.html

  * igt@kms_flip_scaled_crc@flip-32bpp-yftileccs-to-64bpp-yftile-downscaling@pipe-a-valid-mode:
    - shard-dg2:          NOTRUN -> [SKIP][170] ([i915#2672]) +1 other test skip
   [170]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-8/igt@kms_flip_scaled_crc@flip-32bpp-yftileccs-to-64bpp-yftile-downscaling@pipe-a-valid-mode.html

  * igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling@pipe-a-valid-mode:
    - shard-dg2:          NOTRUN -> [SKIP][171] ([i915#2672] / [i915#3555])
   [171]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-8/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling@pipe-a-valid-mode.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-blt:
    - shard-dg2:          NOTRUN -> [SKIP][172] ([i915#5354]) +45 other tests skip
   [172]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-11/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-indfb-draw-mmap-wc:
    - shard-rkl:          NOTRUN -> [SKIP][173] ([i915#1825]) +48 other tests skip
   [173]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-3/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-render:
    - shard-tglu:         NOTRUN -> [SKIP][174] +41 other tests skip
   [174]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-tglu-8/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-render.html

  * igt@kms_frontbuffer_tracking@fbc-rgb565-draw-mmap-gtt:
    - shard-dg1:          NOTRUN -> [SKIP][175] ([i915#8708]) +22 other tests skip
   [175]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-16/igt@kms_frontbuffer_tracking@fbc-rgb565-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbc-tiling-4:
    - shard-rkl:          NOTRUN -> [SKIP][176] ([i915#5439])
   [176]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-5/igt@kms_frontbuffer_tracking@fbc-tiling-4.html

  * igt@kms_frontbuffer_tracking@fbc-tiling-y:
    - shard-dg2:          NOTRUN -> [SKIP][177] ([i915#10055])
   [177]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-8/igt@kms_frontbuffer_tracking@fbc-tiling-y.html

  * igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-blt:
    - shard-dg1:          NOTRUN -> [SKIP][178] ([i915#3458]) +13 other tests skip
   [178]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-16/igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-mmap-wc:
    - shard-rkl:          NOTRUN -> [SKIP][179] ([i915#3023]) +32 other tests skip
   [179]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-3/igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@psr-1p-primscrn-spr-indfb-draw-mmap-wc:
    - shard-dg2:          NOTRUN -> [SKIP][180] ([i915#8708]) +20 other tests skip
   [180]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-8/igt@kms_frontbuffer_tracking@psr-1p-primscrn-spr-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@psr-1p-primscrn-spr-indfb-onoff:
    - shard-dg2:          NOTRUN -> [SKIP][181] ([i915#3458]) +18 other tests skip
   [181]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-8/igt@kms_frontbuffer_tracking@psr-1p-primscrn-spr-indfb-onoff.html

  * igt@kms_frontbuffer_tracking@psr-2p-primscrn-pri-indfb-draw-blt:
    - shard-mtlp:         NOTRUN -> [SKIP][182] ([i915#1825]) +4 other tests skip
   [182]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-mtlp-4/igt@kms_frontbuffer_tracking@psr-2p-primscrn-pri-indfb-draw-blt.html

  * igt@kms_hdr@bpc-switch:
    - shard-tglu:         NOTRUN -> [SKIP][183] ([i915#3555] / [i915#8228]) +1 other test skip
   [183]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-tglu-3/igt@kms_hdr@bpc-switch.html

  * igt@kms_hdr@static-toggle:
    - shard-dg1:          NOTRUN -> [SKIP][184] ([i915#3555] / [i915#8228]) +2 other tests skip
   [184]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-16/igt@kms_hdr@static-toggle.html

  * igt@kms_hdr@static-toggle-dpms:
    - shard-rkl:          NOTRUN -> [SKIP][185] ([i915#3555] / [i915#8228]) +1 other test skip
   [185]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-2/igt@kms_hdr@static-toggle-dpms.html

  * igt@kms_multipipe_modeset@basic-max-pipe-crc-check:
    - shard-rkl:          NOTRUN -> [SKIP][186] ([i915#4816])
   [186]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-4/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html

  * igt@kms_panel_fitting@atomic-fastset:
    - shard-rkl:          NOTRUN -> [SKIP][187] ([i915#6301])
   [187]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-5/igt@kms_panel_fitting@atomic-fastset.html

  * igt@kms_panel_fitting@legacy:
    - shard-dg2:          NOTRUN -> [SKIP][188] ([i915#6301])
   [188]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-8/igt@kms_panel_fitting@legacy.html

  * igt@kms_plane_lowres@tiling-yf:
    - shard-dg2:          NOTRUN -> [SKIP][189] ([i915#3555] / [i915#8821])
   [189]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-11/igt@kms_plane_lowres@tiling-yf.html

  * igt@kms_plane_scaling@plane-downscale-factor-0-25-with-pixel-format@pipe-b-hdmi-a-3:
    - shard-dg2:          NOTRUN -> [SKIP][190] ([i915#9423]) +7 other tests skip
   [190]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-6/igt@kms_plane_scaling@plane-downscale-factor-0-25-with-pixel-format@pipe-b-hdmi-a-3.html

  * igt@kms_plane_scaling@plane-downscale-factor-0-25-with-rotation@pipe-a-hdmi-a-1:
    - shard-tglu:         NOTRUN -> [SKIP][191] ([i915#9423]) +3 other tests skip
   [191]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-tglu-3/igt@kms_plane_scaling@plane-downscale-factor-0-25-with-rotation@pipe-a-hdmi-a-1.html

  * igt@kms_plane_scaling@plane-downscale-factor-0-5-with-rotation@pipe-a-hdmi-a-1:
    - shard-rkl:          NOTRUN -> [SKIP][192] ([i915#9423]) +5 other tests skip
   [192]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-2/igt@kms_plane_scaling@plane-downscale-factor-0-5-with-rotation@pipe-a-hdmi-a-1.html

  * igt@kms_plane_scaling@plane-downscale-factor-0-5-with-rotation@pipe-a-hdmi-a-4:
    - shard-dg1:          NOTRUN -> [SKIP][193] ([i915#9423]) +11 other tests skip
   [193]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-18/igt@kms_plane_scaling@plane-downscale-factor-0-5-with-rotation@pipe-a-hdmi-a-4.html

  * igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-20x20@pipe-b-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [SKIP][194] ([i915#5235]) +3 other tests skip
   [194]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-3/igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-20x20@pipe-b-hdmi-a-2.html

  * igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-20x20@pipe-c-hdmi-a-2:
    - shard-dg2:          NOTRUN -> [SKIP][195] ([i915#5235] / [i915#9423] / [i915#9728]) +3 other tests skip
   [195]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-2/igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-20x20@pipe-c-hdmi-a-2.html

  * igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-factor-0-25@pipe-b-hdmi-a-3:
    - shard-dg1:          NOTRUN -> [SKIP][196] ([i915#5235]) +3 other tests skip
   [196]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-13/igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-factor-0-25@pipe-b-hdmi-a-3.html

  * igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-5@pipe-b-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][197] ([i915#5235]) +2 other tests skip
   [197]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-mtlp-4/igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-5@pipe-b-edp-1.html

  * igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-5@pipe-d-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][198] ([i915#3555] / [i915#5235])
   [198]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-mtlp-4/igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-5@pipe-d-edp-1.html

  * igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-25@pipe-a-hdmi-a-3:
    - shard-dg2:          NOTRUN -> [SKIP][199] ([i915#5235] / [i915#9423]) +11 other tests skip
   [199]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-7/igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-25@pipe-a-hdmi-a-3.html

  * igt@kms_pm_backlight@bad-brightness:
    - shard-rkl:          NOTRUN -> [SKIP][200] ([i915#5354]) +1 other test skip
   [200]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-3/igt@kms_pm_backlight@bad-brightness.html

  * igt@kms_pm_dc@dc3co-vpb-simulation:
    - shard-tglu:         NOTRUN -> [SKIP][201] ([i915#9685])
   [201]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-tglu-3/igt@kms_pm_dc@dc3co-vpb-simulation.html

  * igt@kms_pm_dc@dc5-psr:
    - shard-rkl:          NOTRUN -> [SKIP][202] ([i915#9685]) +1 other test skip
   [202]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-2/igt@kms_pm_dc@dc5-psr.html
    - shard-dg1:          NOTRUN -> [SKIP][203] ([i915#9685])
   [203]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-18/igt@kms_pm_dc@dc5-psr.html

  * igt@kms_pm_dc@dc6-psr:
    - shard-dg2:          NOTRUN -> [SKIP][204] ([i915#9685])
   [204]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-8/igt@kms_pm_dc@dc6-psr.html

  * igt@kms_pm_rpm@modeset-lpsp-stress-no-wait:
    - shard-dg2:          NOTRUN -> [SKIP][205] ([i915#9519])
   [205]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-6/igt@kms_pm_rpm@modeset-lpsp-stress-no-wait.html

  * igt@kms_pm_rpm@modeset-non-lpsp:
    - shard-tglu:         NOTRUN -> [SKIP][206] ([i915#9519])
   [206]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-tglu-3/igt@kms_pm_rpm@modeset-non-lpsp.html

  * igt@kms_prime@basic-crc-hybrid:
    - shard-rkl:          NOTRUN -> [SKIP][207] ([i915#6524])
   [207]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-3/igt@kms_prime@basic-crc-hybrid.html

  * igt@kms_prime@basic-crc-vgem:
    - shard-dg2:          NOTRUN -> [SKIP][208] ([i915#6524] / [i915#6805]) +1 other test skip
   [208]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-8/igt@kms_prime@basic-crc-vgem.html

  * igt@kms_psr2_sf@fbc-overlay-plane-update-sf-dmg-area:
    - shard-dg1:          NOTRUN -> [SKIP][209] +44 other tests skip
   [209]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-16/igt@kms_psr2_sf@fbc-overlay-plane-update-sf-dmg-area.html

  * igt@kms_psr2_su@page_flip-p010:
    - shard-rkl:          NOTRUN -> [SKIP][210] ([i915#9683])
   [210]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-5/igt@kms_psr2_su@page_flip-p010.html

  * igt@kms_psr2_su@page_flip-xrgb8888:
    - shard-dg2:          NOTRUN -> [SKIP][211] ([i915#9683])
   [211]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-8/igt@kms_psr2_su@page_flip-xrgb8888.html

  * igt@kms_psr@fbc-pr-sprite-render:
    - shard-dg1:          NOTRUN -> [SKIP][212] ([i915#1072] / [i915#9732]) +18 other tests skip
   [212]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-16/igt@kms_psr@fbc-pr-sprite-render.html

  * igt@kms_psr@fbc-psr-sprite-plane-move:
    - shard-tglu:         NOTRUN -> [SKIP][213] ([i915#9732]) +9 other tests skip
   [213]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-tglu-3/igt@kms_psr@fbc-psr-sprite-plane-move.html

  * igt@kms_psr@fbc-psr2-primary-mmap-gtt@edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][214] ([i915#9688])
   [214]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-mtlp-4/igt@kms_psr@fbc-psr2-primary-mmap-gtt@edp-1.html

  * igt@kms_psr@psr-cursor-mmap-cpu:
    - shard-dg2:          NOTRUN -> [SKIP][215] ([i915#1072] / [i915#9673] / [i915#9732]) +4 other tests skip
   [215]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-11/igt@kms_psr@psr-cursor-mmap-cpu.html

  * igt@kms_psr@psr2-primary-mmap-gtt:
    - shard-dg2:          NOTRUN -> [SKIP][216] ([i915#1072] / [i915#9732]) +19 other tests skip
   [216]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-8/igt@kms_psr@psr2-primary-mmap-gtt.html

  * igt@kms_psr@psr2-suspend:
    - shard-rkl:          NOTRUN -> [SKIP][217] ([i915#1072] / [i915#9732]) +28 other tests skip
   [217]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-2/igt@kms_psr@psr2-suspend.html

  * igt@kms_rotation_crc@primary-yf-tiled-reflect-x-180:
    - shard-rkl:          NOTRUN -> [SKIP][218] ([i915#5289])
   [218]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-3/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-180.html

  * igt@kms_setmode@invalid-clone-exclusive-crtc:
    - shard-dg2:          NOTRUN -> [SKIP][219] ([i915#3555]) +3 other tests skip
   [219]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-6/igt@kms_setmode@invalid-clone-exclusive-crtc.html

  * igt@kms_sysfs_edid_timing:
    - shard-dg2:          NOTRUN -> [FAIL][220] ([IGT#2])
   [220]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-8/igt@kms_sysfs_edid_timing.html

  * igt@kms_tiled_display@basic-test-pattern:
    - shard-dg2:          NOTRUN -> [SKIP][221] ([i915#8623])
   [221]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-6/igt@kms_tiled_display@basic-test-pattern.html
    - shard-rkl:          NOTRUN -> [SKIP][222] ([i915#8623])
   [222]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-4/igt@kms_tiled_display@basic-test-pattern.html

  * igt@kms_universal_plane@cursor-fb-leak@pipe-a-hdmi-a-1:
    - shard-snb:          [PASS][223] -> [FAIL][224] ([i915#9196])
   [223]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14943/shard-snb5/igt@kms_universal_plane@cursor-fb-leak@pipe-a-hdmi-a-1.html
   [224]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-snb7/igt@kms_universal_plane@cursor-fb-leak@pipe-a-hdmi-a-1.html

  * igt@kms_universal_plane@cursor-fb-leak@pipe-c-hdmi-a-1:
    - shard-tglu:         [PASS][225] -> [FAIL][226] ([i915#9196])
   [225]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14943/shard-tglu-3/igt@kms_universal_plane@cursor-fb-leak@pipe-c-hdmi-a-1.html
   [226]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-tglu-3/igt@kms_universal_plane@cursor-fb-leak@pipe-c-hdmi-a-1.html

  * igt@kms_vrr@seamless-rr-switch-virtual:
    - shard-rkl:          NOTRUN -> [SKIP][227] ([i915#9906]) +1 other test skip
   [227]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-5/igt@kms_vrr@seamless-rr-switch-virtual.html

  * igt@kms_vrr@seamless-rr-switch-vrr:
    - shard-dg2:          NOTRUN -> [SKIP][228] ([i915#9906])
   [228]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-6/igt@kms_vrr@seamless-rr-switch-vrr.html

  * igt@kms_writeback@writeback-check-output-xrgb2101010:
    - shard-dg2:          NOTRUN -> [SKIP][229] ([i915#2437] / [i915#9412])
   [229]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-8/igt@kms_writeback@writeback-check-output-xrgb2101010.html

  * igt@kms_writeback@writeback-fb-id-xrgb2101010:
    - shard-glk:          NOTRUN -> [SKIP][230] ([i915#2437])
   [230]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-glk8/igt@kms_writeback@writeback-fb-id-xrgb2101010.html

  * igt@kms_writeback@writeback-invalid-parameters:
    - shard-dg1:          NOTRUN -> [SKIP][231] ([i915#2437])
   [231]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-13/igt@kms_writeback@writeback-invalid-parameters.html
    - shard-tglu:         NOTRUN -> [SKIP][232] ([i915#2437])
   [232]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-tglu-8/igt@kms_writeback@writeback-invalid-parameters.html

  * igt@kms_writeback@writeback-pixel-formats:
    - shard-rkl:          NOTRUN -> [SKIP][233] ([i915#2437] / [i915#9412])
   [233]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-3/igt@kms_writeback@writeback-pixel-formats.html

  * igt@perf@gen8-unprivileged-single-ctx-counters:
    - shard-dg2:          NOTRUN -> [SKIP][234] ([i915#2436])
   [234]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-11/igt@perf@gen8-unprivileged-single-ctx-counters.html

  * igt@perf@mi-rpc:
    - shard-dg2:          NOTRUN -> [SKIP][235] ([i915#2434])
   [235]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-8/igt@perf@mi-rpc.html

  * igt@perf_pmu@cpu-hotplug:
    - shard-tglu:         NOTRUN -> [SKIP][236] ([i915#8850])
   [236]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-tglu-3/igt@perf_pmu@cpu-hotplug.html

  * igt@perf_pmu@enable-race@vecs0:
    - shard-dg1:          NOTRUN -> [INCOMPLETE][237] ([i915#9853])
   [237]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-14/igt@perf_pmu@enable-race@vecs0.html

  * igt@perf_pmu@frequency@gt0:
    - shard-dg1:          NOTRUN -> [FAIL][238] ([i915#6806])
   [238]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-16/igt@perf_pmu@frequency@gt0.html

  * igt@perf_pmu@rc6-all-gts:
    - shard-dg2:          NOTRUN -> [SKIP][239] ([i915#8516])
   [239]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-8/igt@perf_pmu@rc6-all-gts.html

  * igt@prime_vgem@basic-fence-flip:
    - shard-dg2:          NOTRUN -> [SKIP][240] ([i915#3708])
   [240]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-6/igt@prime_vgem@basic-fence-flip.html

  * igt@prime_vgem@basic-fence-mmap:
    - shard-dg2:          NOTRUN -> [SKIP][241] ([i915#3708] / [i915#4077])
   [241]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-2/igt@prime_vgem@basic-fence-mmap.html

  * igt@prime_vgem@basic-fence-read:
    - shard-rkl:          NOTRUN -> [SKIP][242] ([i915#3291] / [i915#3708])
   [242]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-2/igt@prime_vgem@basic-fence-read.html
    - shard-dg1:          NOTRUN -> [SKIP][243] ([i915#3708]) +1 other test skip
   [243]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-18/igt@prime_vgem@basic-fence-read.html

  * igt@sriov_basic@enable-vfs-autoprobe-on:
    - shard-tglu:         NOTRUN -> [SKIP][244] ([i915#9917]) +1 other test skip
   [244]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-tglu-8/igt@sriov_basic@enable-vfs-autoprobe-on.html
    - shard-dg1:          NOTRUN -> [SKIP][245] ([i915#9917])
   [245]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-13/igt@sriov_basic@enable-vfs-autoprobe-on.html

  * igt@sriov_basic@enable-vfs-bind-unbind-each:
    - shard-rkl:          NOTRUN -> [SKIP][246] ([i915#9917])
   [246]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-4/igt@sriov_basic@enable-vfs-bind-unbind-each.html

  * igt@syncobj_timeline@invalid-wait-zero-handles:
    - shard-glk:          NOTRUN -> [FAIL][247] ([i915#9781])
   [247]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-glk8/igt@syncobj_timeline@invalid-wait-zero-handles.html

  * igt@syncobj_wait@invalid-wait-zero-handles:
    - shard-dg1:          NOTRUN -> [FAIL][248] ([i915#9779])
   [248]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-16/igt@syncobj_wait@invalid-wait-zero-handles.html

  * igt@tools_test@sysfs_l3_parity:
    - shard-dg1:          NOTRUN -> [SKIP][249] ([i915#4818])
   [249]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-16/igt@tools_test@sysfs_l3_parity.html

  
#### Possible fixes ####

  * igt@drm_fdinfo@virtual-idle:
    - shard-rkl:          [FAIL][250] ([i915#7742]) -> [PASS][251]
   [250]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14943/shard-rkl-6/igt@drm_fdinfo@virtual-idle.html
   [251]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-rkl-5/igt@drm_fdinfo@virtual-idle.html

  * igt@gem_eio@hibernate:
    - shard-tglu:         [ABORT][252] ([i915#10030] / [i915#7975] / [i915#8213]) -> [PASS][253]
   [252]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14943/shard-tglu-10/igt@gem_eio@hibernate.html
   [253]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-tglu-8/igt@gem_eio@hibernate.html

  * igt@gem_exec_suspend@basic-s3-devices@lmem0:
    - shard-dg2:          [FAIL][254] ([i915#11269]) -> [PASS][255] +1 other test pass
   [254]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14943/shard-dg2-8/igt@gem_exec_suspend@basic-s3-devices@lmem0.html
   [255]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-10/igt@gem_exec_suspend@basic-s3-devices@lmem0.html

  * igt@i915_pm_rc6_residency@rc6-idle@gt0-vecs0:
    - shard-dg1:          [FAIL][256] ([i915#3591]) -> [PASS][257]
   [256]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14943/shard-dg1-15/igt@i915_pm_rc6_residency@rc6-idle@gt0-vecs0.html
   [257]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-14/igt@i915_pm_rc6_residency@rc6-idle@gt0-vecs0.html

  * igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-blt:
    - shard-dg2:          [FAIL][258] ([i915#6880]) -> [PASS][259]
   [258]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14943/shard-dg2-5/igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-blt.html
   [259]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-3/igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-blt.html

  * igt@kms_pipe_crc_basic@suspend-read-crc@pipe-d-hdmi-a-1:
    - shard-dg2:          [FAIL][260] ([i915#11274] / [i915#11279]) -> [PASS][261] +3 other tests pass
   [260]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14943/shard-dg2-8/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-d-hdmi-a-1.html
   [261]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-10/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-d-hdmi-a-1.html

  * {igt@kms_plane@plane-position-covered@pipe-a-plane-1}:
    - shard-mtlp:         [INCOMPLETE][262] -> [PASS][263]
   [262]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14943/shard-mtlp-1/igt@kms_plane@plane-position-covered@pipe-a-plane-1.html
   [263]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-mtlp-4/igt@kms_plane@plane-position-covered@pipe-a-plane-1.html

  * igt@kms_pm_rpm@dpms-lpsp:
    - shard-dg2:          [SKIP][264] ([i915#9519]) -> [PASS][265]
   [264]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14943/shard-dg2-3/igt@kms_pm_rpm@dpms-lpsp.html
   [265]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-8/igt@kms_pm_rpm@dpms-lpsp.html

  * igt@perf_pmu@enable-race@bcs0:
    - shard-dg1:          [INCOMPLETE][266] ([i915#9853]) -> [PASS][267]
   [266]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14943/shard-dg1-15/igt@perf_pmu@enable-race@bcs0.html
   [267]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg1-14/igt@perf_pmu@enable-race@bcs0.html

  
#### Warnings ####

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-indfb-draw-mmap-cpu:
    - shard-dg2:          [SKIP][268] ([i915#10433] / [i915#3458]) -> [SKIP][269] ([i915#3458])
   [268]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14943/shard-dg2-4/igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-indfb-draw-mmap-cpu.html
   [269]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-1/igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-indfb-draw-mmap-cpu.html

  * igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-draw-mmap-cpu:
    - shard-dg2:          [SKIP][270] ([i915#3458]) -> [SKIP][271] ([i915#10433] / [i915#3458])
   [270]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14943/shard-dg2-7/igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-draw-mmap-cpu.html
   [271]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-4/igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-draw-mmap-cpu.html

  * igt@kms_psr@pr-primary-mmap-cpu:
    - shard-dg2:          [SKIP][272] ([i915#1072] / [i915#9673] / [i915#9732]) -> [SKIP][273] ([i915#1072] / [i915#9732]) +1 other test skip
   [272]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14943/shard-dg2-11/igt@kms_psr@pr-primary-mmap-cpu.html
   [273]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/shard-dg2-10/igt@kms_psr@pr-primary-mmap-cpu.html

  
  {name}: This element is suppressed. This means it is ignored when computing
          the status of the difference (SUCCESS, WARNING, or FAILURE).

  [IGT#2]: https://gitlab.freedesktop.org/drm/igt-gpu-tools/issues/2
  [i915#10030]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10030
  [i915#10055]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10055
  [i915#10278]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10278
  [i915#10307]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10307
  [i915#10378]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10378
  [i915#10433]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10433
  [i915#10434]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10434
  [i915#10656]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10656
  [i915#1072]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1072
  [i915#11078]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11078
  [i915#11269]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11269
  [i915#11274]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11274
  [i915#11279]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11279
  [i915#1769]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1769
  [i915#1825]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1825
  [i915#1839]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1839
  [i915#2122]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2122
  [i915#2434]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2434
  [i915#2436]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2436
  [i915#2437]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2437
  [i915#2527]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2527
  [i915#2587]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2587
  [i915#2658]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2658
  [i915#2672]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2672
  [i915#280]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/280
  [i915#284]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/284
  [i915#2842]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2842
  [i915#2856]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2856
  [i915#3023]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3023
  [i915#3281]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3281
  [i915#3282]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3282
  [i915#3291]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3291
  [i915#3297]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3297
  [i915#3299]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3299
  [i915#3359]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3359
  [i915#3458]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3458
  [i915#3539]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3539
  [i915#3555]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3555
  [i915#3591]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3591
  [i915#3637]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3637
  [i915#3638]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3638
  [i915#3708]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3708
  [i915#3742]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3742
  [i915#3826]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3826
  [i915#3840]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3840
  [i915#3966]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3966
  [i915#4036]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4036
  [i915#4077]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4077
  [i915#4079]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4079
  [i915#4083]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4083
  [i915#4103]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4103
  [i915#4212]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4212
  [i915#4213]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4213
  [i915#4270]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4270
  [i915#4525]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4525
  [i915#4538]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4538
  [i915#4613]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4613
  [i915#4771]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4771
  [i915#4812]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4812
  [i915#4816]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4816
  [i915#4818]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4818
  [i915#4852]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4852
  [i915#4854]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4854
  [i915#4860]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4860
  [i915#4873]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4873
  [i915#4881]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4881
  [i915#5190]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5190
  [i915#5235]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5235
  [i915#5286]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5286
  [i915#5289]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5289
  [i915#5354]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5354
  [i915#5439]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5439
  [i915#5723]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5723
  [i915#5784]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5784
  [i915#5889]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5889
  [i915#6095]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6095
  [i915#6227]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6227
  [i915#6230]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6230
  [i915#6301]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6301
  [i915#6334]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6334
  [i915#6344]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6344
  [i915#6524]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6524
  [i915#658]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/658
  [i915#6590]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6590
  [i915#6621]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6621
  [i915#6805]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6805
  [i915#6806]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6806
  [i915#6880]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6880
  [i915#6944]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6944
  [i915#7116]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7116
  [i915#7118]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7118
  [i915#7697]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7697
  [i915#7742]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7742
  [i915#7828]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7828
  [i915#7975]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7975
  [i915#8213]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8213
  [i915#8228]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8228
  [i915#8381]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8381
  [i915#8399]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8399
  [i915#8411]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8411
  [i915#8414]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8414
  [i915#8428]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8428
  [i915#8516]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8516
  [i915#8555]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8555
  [i915#8562]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8562
  [i915#8588]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8588
  [i915#8623]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8623
  [i915#8708]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8708
  [i915#8709]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8709
  [i915#8812]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8812
  [i915#8814]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8814
  [i915#8821]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8821
  [i915#8850]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8850
  [i915#8925]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8925
  [i915#9196]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9196
  [i915#9323]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9323
  [i915#9412]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9412
  [i915#9423]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9423
  [i915#9424]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9424
  [i915#9519]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9519
  [i915#9531]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9531
  [i915#9561]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9561
  [i915#9673]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9673
  [i915#9683]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9683
  [i915#9685]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9685
  [i915#9688]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9688
  [i915#9723]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9723
  [i915#9728]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9728
  [i915#9732]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9732
  [i915#9779]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9779
  [i915#9781]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9781
  [i915#9820]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9820
  [i915#9833]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9833
  [i915#9853]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9853
  [i915#9906]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9906
  [i915#9917]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9917
  [i915#9934]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9934


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

  * Linux: CI_DRM_14943 -> Patchwork_134891v1
  * Piglit: piglit_4509 -> None

  CI-20190529: 20190529
  CI_DRM_14943: 00e9498b453447a5afe527bd0e174587b12f66d2 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_7888: 021538d059575eb9f93d36fea36015cd3f9fca7d @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  Patchwork_134891v1: 00e9498b453447a5afe527bd0e174587b12f66d2 @ git://anongit.freedesktop.org/gfx-ci/linux
  piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134891v1/index.html

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

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

* Re: [PATCH 2/6] drm/ttm: Store the bo_kmap_type in struct iosys_map
  2024-06-14 14:31   ` Christian König
@ 2024-06-17 12:32     ` Thomas Zimmermann
  2024-06-17 12:56       ` Christian König
  0 siblings, 1 reply; 16+ messages in thread
From: Thomas Zimmermann @ 2024-06-17 12:32 UTC (permalink / raw)
  To: Christian König, maarten.lankhorst, mripard, airlied, daniel,
	lucas.demarchi, rodrigo.vivi, jani.nikula, ray.huang, kraxel,
	airlied, suijingfeng
  Cc: dri-devel, intel-xe, intel-gfx

Hi

Am 14.06.24 um 16:31 schrieb Christian König:
> Am 14.06.24 um 15:21 schrieb Thomas Zimmermann:
>> For each instances of struct iosys_map set up by ttm_bo_vmap(), store
>> the type of allocation in the instance. Use this information to unmap
>> the memory in ttm_bo_vunmap(). This change simplifies the unmap code
>> and puts the complicated logic entirely into the map code.
>
> I'm not sure that's a good idea.
>
> The mapping information should already be available in the resource 
> and storing it in the iosys_map structures duplicates that information.
>
> So we might run into the issue that the resource has changed and so we 
> need a different approach now, but the iosys_map will say that we 
> should unmap things for example.

Patches 1 and 2 are only here to make patch 4 (add the kmap special 
case) work. How can I distinguish between vmap'ed and kmap'ed memory? 
It's not clear to me, whether there is a benefit from patch 4. The xe 
driver makes it sound like that, but the rest of the kernel appears to 
disagree.

Best regards
Thomas

>
> Regards,
> Christian.
>
>>
>> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
>> ---
>>   drivers/gpu/drm/ttm/ttm_bo_util.c | 46 +++++++++++++++++++++----------
>>   1 file changed, 31 insertions(+), 15 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c 
>> b/drivers/gpu/drm/ttm/ttm_bo_util.c
>> index 0b3f4267130c4..a9df0deff2deb 100644
>> --- a/drivers/gpu/drm/ttm/ttm_bo_util.c
>> +++ b/drivers/gpu/drm/ttm/ttm_bo_util.c
>> @@ -36,6 +36,7 @@
>>   #include <drm/ttm/ttm_tt.h>
>>     #include <drm/drm_cache.h>
>> +#include <drm/drm_device.h>
>>     struct ttm_transfer_obj {
>>       struct ttm_buffer_object base;
>> @@ -479,24 +480,29 @@ int ttm_bo_vmap(struct ttm_buffer_object *bo, 
>> struct iosys_map *map)
>>         if (mem->bus.is_iomem) {
>>           void __iomem *vaddr_iomem;
>> +        u16 alloc_flags;
>>   -        if (mem->bus.addr)
>> +        if (mem->bus.addr) {
>>               vaddr_iomem = (void __iomem *)mem->bus.addr;
>> -        else if (mem->bus.caching == ttm_write_combined)
>> -            vaddr_iomem = ioremap_wc(mem->bus.offset,
>> -                         bo->base.size);
>> +            alloc_flags = ttm_bo_map_premapped;
>> +        } else if (mem->bus.caching == ttm_write_combined) {
>> +            vaddr_iomem = ioremap_wc(mem->bus.offset, bo->base.size);
>> +            alloc_flags = ttm_bo_map_iomap;
>>   #ifdef CONFIG_X86
>> -        else if (mem->bus.caching == ttm_cached)
>> -            vaddr_iomem = ioremap_cache(mem->bus.offset,
>> -                          bo->base.size);
>> +        } else if (mem->bus.caching == ttm_cached) {
>> +            vaddr_iomem = ioremap_cache(mem->bus.offset, 
>> bo->base.size);
>> +            alloc_flags = ttm_bo_map_iomap;
>>   #endif
>> -        else
>> +        } else {
>>               vaddr_iomem = ioremap(mem->bus.offset, bo->base.size);
>> +            alloc_flags = ttm_bo_map_iomap;
>> +        }
>>             if (!vaddr_iomem)
>>               return -ENOMEM;
>>             iosys_map_set_vaddr_iomem(map, vaddr_iomem);
>> +        map->alloc_flags = alloc_flags;
>>         } else {
>>           struct ttm_operation_ctx ctx = {
>> @@ -506,6 +512,7 @@ int ttm_bo_vmap(struct ttm_buffer_object *bo, 
>> struct iosys_map *map)
>>           struct ttm_tt *ttm = bo->ttm;
>>           pgprot_t prot;
>>           void *vaddr;
>> +        u16 alloc_flags;
>>             ret = ttm_tt_populate(bo->bdev, ttm, &ctx);
>>           if (ret)
>> @@ -519,8 +526,10 @@ int ttm_bo_vmap(struct ttm_buffer_object *bo, 
>> struct iosys_map *map)
>>           vaddr = vmap(ttm->pages, ttm->num_pages, 0, prot);
>>           if (!vaddr)
>>               return -ENOMEM;
>> +        alloc_flags = ttm_bo_map_vmap;
>>             iosys_map_set_vaddr(map, vaddr);
>> +        map->alloc_flags = alloc_flags;
>>       }
>>         return 0;
>> @@ -537,20 +546,27 @@ EXPORT_SYMBOL(ttm_bo_vmap);
>>    */
>>   void ttm_bo_vunmap(struct ttm_buffer_object *bo, struct iosys_map 
>> *map)
>>   {
>> -    struct ttm_resource *mem = bo->resource;
>> -
>>       dma_resv_assert_held(bo->base.resv);
>>         if (iosys_map_is_null(map))
>>           return;
>>   -    if (!map->is_iomem)
>> -        vunmap(map->vaddr);
>> -    else if (!mem->bus.addr)
>> +    switch (map->alloc_flags) {
>> +    case ttm_bo_map_iomap:
>>           iounmap(map->vaddr_iomem);
>> -    iosys_map_clear(map);
>> -
>> +        break;
>> +    case ttm_bo_map_vmap:
>> +        vunmap(map->vaddr);
>> +        break;
>> +    case ttm_bo_map_premapped:
>> +        break;
>> +    default:
>> +        drm_err(bo->base.dev, "Unsupported alloc_flags 0x%x\n", 
>> map->alloc_flags);
>> +        return;
>> +    }
>>       ttm_mem_io_free(bo->bdev, bo->resource);
>> +
>> +    iosys_map_clear(map);
>>   }
>>   EXPORT_SYMBOL(ttm_bo_vunmap);
>

-- 
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)


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

* Re: [PATCH 2/6] drm/ttm: Store the bo_kmap_type in struct iosys_map
  2024-06-17 12:32     ` Thomas Zimmermann
@ 2024-06-17 12:56       ` Christian König
  0 siblings, 0 replies; 16+ messages in thread
From: Christian König @ 2024-06-17 12:56 UTC (permalink / raw)
  To: Thomas Zimmermann, maarten.lankhorst, mripard, airlied, daniel,
	lucas.demarchi, rodrigo.vivi, jani.nikula, ray.huang, kraxel,
	airlied, suijingfeng
  Cc: dri-devel, intel-xe, intel-gfx

Hi,

Am 17.06.24 um 14:32 schrieb Thomas Zimmermann:
> Hi
>
> Am 14.06.24 um 16:31 schrieb Christian König:
>> Am 14.06.24 um 15:21 schrieb Thomas Zimmermann:
>>> For each instances of struct iosys_map set up by ttm_bo_vmap(), store
>>> the type of allocation in the instance. Use this information to unmap
>>> the memory in ttm_bo_vunmap(). This change simplifies the unmap code
>>> and puts the complicated logic entirely into the map code.
>>
>> I'm not sure that's a good idea.
>>
>> The mapping information should already be available in the resource 
>> and storing it in the iosys_map structures duplicates that information.
>>
>> So we might run into the issue that the resource has changed and so 
>> we need a different approach now, but the iosys_map will say that we 
>> should unmap things for example.
>
> Patches 1 and 2 are only here to make patch 4 (add the kmap special 
> case) work. How can I distinguish between vmap'ed and kmap'ed memory? 
> It's not clear to me, whether there is a benefit from patch 4. The xe 
> driver makes it sound like that, but the rest of the kernel appears to 
> disagree.

Yeah, exactly that's the point.

The last time we talked about that we came to the conclusion that the 
kmap approach of mapping only a single page or range of pages isn't that 
useful in general.

The only use case where you actually need this is the 
ttm_bo_vm_access_kmap() helper and that is static and internal to TTM.

So what exactly is the use case xe tries to handle here?

Regards,
Christian.

>
> Best regards
> Thomas
>
>>
>> Regards,
>> Christian.
>>
>>>
>>> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
>>> ---
>>>   drivers/gpu/drm/ttm/ttm_bo_util.c | 46 
>>> +++++++++++++++++++++----------
>>>   1 file changed, 31 insertions(+), 15 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c 
>>> b/drivers/gpu/drm/ttm/ttm_bo_util.c
>>> index 0b3f4267130c4..a9df0deff2deb 100644
>>> --- a/drivers/gpu/drm/ttm/ttm_bo_util.c
>>> +++ b/drivers/gpu/drm/ttm/ttm_bo_util.c
>>> @@ -36,6 +36,7 @@
>>>   #include <drm/ttm/ttm_tt.h>
>>>     #include <drm/drm_cache.h>
>>> +#include <drm/drm_device.h>
>>>     struct ttm_transfer_obj {
>>>       struct ttm_buffer_object base;
>>> @@ -479,24 +480,29 @@ int ttm_bo_vmap(struct ttm_buffer_object *bo, 
>>> struct iosys_map *map)
>>>         if (mem->bus.is_iomem) {
>>>           void __iomem *vaddr_iomem;
>>> +        u16 alloc_flags;
>>>   -        if (mem->bus.addr)
>>> +        if (mem->bus.addr) {
>>>               vaddr_iomem = (void __iomem *)mem->bus.addr;
>>> -        else if (mem->bus.caching == ttm_write_combined)
>>> -            vaddr_iomem = ioremap_wc(mem->bus.offset,
>>> -                         bo->base.size);
>>> +            alloc_flags = ttm_bo_map_premapped;
>>> +        } else if (mem->bus.caching == ttm_write_combined) {
>>> +            vaddr_iomem = ioremap_wc(mem->bus.offset, bo->base.size);
>>> +            alloc_flags = ttm_bo_map_iomap;
>>>   #ifdef CONFIG_X86
>>> -        else if (mem->bus.caching == ttm_cached)
>>> -            vaddr_iomem = ioremap_cache(mem->bus.offset,
>>> -                          bo->base.size);
>>> +        } else if (mem->bus.caching == ttm_cached) {
>>> +            vaddr_iomem = ioremap_cache(mem->bus.offset, 
>>> bo->base.size);
>>> +            alloc_flags = ttm_bo_map_iomap;
>>>   #endif
>>> -        else
>>> +        } else {
>>>               vaddr_iomem = ioremap(mem->bus.offset, bo->base.size);
>>> +            alloc_flags = ttm_bo_map_iomap;
>>> +        }
>>>             if (!vaddr_iomem)
>>>               return -ENOMEM;
>>>             iosys_map_set_vaddr_iomem(map, vaddr_iomem);
>>> +        map->alloc_flags = alloc_flags;
>>>         } else {
>>>           struct ttm_operation_ctx ctx = {
>>> @@ -506,6 +512,7 @@ int ttm_bo_vmap(struct ttm_buffer_object *bo, 
>>> struct iosys_map *map)
>>>           struct ttm_tt *ttm = bo->ttm;
>>>           pgprot_t prot;
>>>           void *vaddr;
>>> +        u16 alloc_flags;
>>>             ret = ttm_tt_populate(bo->bdev, ttm, &ctx);
>>>           if (ret)
>>> @@ -519,8 +526,10 @@ int ttm_bo_vmap(struct ttm_buffer_object *bo, 
>>> struct iosys_map *map)
>>>           vaddr = vmap(ttm->pages, ttm->num_pages, 0, prot);
>>>           if (!vaddr)
>>>               return -ENOMEM;
>>> +        alloc_flags = ttm_bo_map_vmap;
>>>             iosys_map_set_vaddr(map, vaddr);
>>> +        map->alloc_flags = alloc_flags;
>>>       }
>>>         return 0;
>>> @@ -537,20 +546,27 @@ EXPORT_SYMBOL(ttm_bo_vmap);
>>>    */
>>>   void ttm_bo_vunmap(struct ttm_buffer_object *bo, struct iosys_map 
>>> *map)
>>>   {
>>> -    struct ttm_resource *mem = bo->resource;
>>> -
>>>       dma_resv_assert_held(bo->base.resv);
>>>         if (iosys_map_is_null(map))
>>>           return;
>>>   -    if (!map->is_iomem)
>>> -        vunmap(map->vaddr);
>>> -    else if (!mem->bus.addr)
>>> +    switch (map->alloc_flags) {
>>> +    case ttm_bo_map_iomap:
>>>           iounmap(map->vaddr_iomem);
>>> -    iosys_map_clear(map);
>>> -
>>> +        break;
>>> +    case ttm_bo_map_vmap:
>>> +        vunmap(map->vaddr);
>>> +        break;
>>> +    case ttm_bo_map_premapped:
>>> +        break;
>>> +    default:
>>> +        drm_err(bo->base.dev, "Unsupported alloc_flags 0x%x\n", 
>>> map->alloc_flags);
>>> +        return;
>>> +    }
>>>       ttm_mem_io_free(bo->bdev, bo->resource);
>>> +
>>> +    iosys_map_clear(map);
>>>   }
>>>   EXPORT_SYMBOL(ttm_bo_vunmap);
>>
>


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

* Re: [PATCH 3/6] drm/ttm: Support partial buffer mappings for ttm_bo_vmap()
  2024-06-14 14:33   ` Christian König
@ 2024-06-17 13:00     ` Thomas Zimmermann
  0 siblings, 0 replies; 16+ messages in thread
From: Thomas Zimmermann @ 2024-06-17 13:00 UTC (permalink / raw)
  To: Christian König, maarten.lankhorst, mripard, airlied, daniel,
	lucas.demarchi, rodrigo.vivi, jani.nikula, ray.huang, kraxel,
	airlied, suijingfeng
  Cc: dri-devel, intel-xe, intel-gfx

Hi

Am 14.06.24 um 16:33 schrieb Christian König:
> Am 14.06.24 um 15:21 schrieb Thomas Zimmermann:
>> Add offset and size parameters to ttm_bo_vmap() to allow for partial
>> mappings of a buffer object. This brings the functionality on par with
>> ttm_bo_kmap().
>
> Well the long term plan was to remove this functionality from 
> ttm_bo_kmap() and nuke that function sooner or later.
>
> What exactly is the use case for partial mappings?

I don't have a use case; except for streamlining the DRM internals.

For the drivers, xe uses partial mappings in 
i915_gem_object_read_from_page(). But struct iosys_map to map the whole 
buffer and do memcpys within the range. See patch 6 for that. I think it 
could do without partial mappings. Vmwgfx uses a local mappings at [1], 
but as the nearby comment says, this could be a TTM helper. Or maybe TTM 
could provide a dedicated ttm_bo_kmap_local_page() for temporary 
mappings like this one. There's also [2], which looks like a candidate 
for a possible ttm_bo_kmap_local_page(). And in vmwgfx, there's the 
memcpy at [3], which could be replaced with ttm_bo_vmap() plus iosys_map 
helpers. I think that's it. Best regards Thomas [1] 
https://elixir.bootlin.com/linux/v6.9/source/drivers/gpu/drm/vmwgfx/vmwgfx_cotable.c#L457 
[2] 
https://elixir.bootlin.com/linux/v6.9/source/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c#L418 
[3] 
https://elixir.bootlin.com/linux/v6.9/source/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c#L430 

>
> Regards,
> Christian.
>
>>
>> Callers pass the byte offset and size within the buffer object and
>> receive a page-aligned mapping of the buffer object's memory for the
>> specified area.
>>
>> Also update all callers of ttm_bo_vmap() for the new parameters. As
>> before, existing callers map the buffer object's complete memory.
>>
>> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
>> ---
>>   drivers/gpu/drm/drm_gem_ttm_helper.c  |  2 +-
>>   drivers/gpu/drm/drm_gem_vram_helper.c |  2 +-
>>   drivers/gpu/drm/loongson/lsdc_gem.c   |  2 +-
>>   drivers/gpu/drm/qxl/qxl_object.c      |  2 +-
>>   drivers/gpu/drm/ttm/ttm_bo_util.c     | 21 +++++++++++++++------
>>   drivers/gpu/drm/xe/xe_lrc.c           |  2 +-
>>   drivers/gpu/drm/xe/xe_vm.c            |  2 +-
>>   include/drm/ttm/ttm_bo.h              |  4 +++-
>>   8 files changed, 24 insertions(+), 13 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/drm_gem_ttm_helper.c 
>> b/drivers/gpu/drm/drm_gem_ttm_helper.c
>> index 3734aa2d1c5b5..f26b7c9077a68 100644
>> --- a/drivers/gpu/drm/drm_gem_ttm_helper.c
>> +++ b/drivers/gpu/drm/drm_gem_ttm_helper.c
>> @@ -67,7 +67,7 @@ int drm_gem_ttm_vmap(struct drm_gem_object *gem,
>>   {
>>       struct ttm_buffer_object *bo = drm_gem_ttm_of_gem(gem);
>>   -    return ttm_bo_vmap(bo, map);
>> +    return ttm_bo_vmap(bo, 0, gem->size, map);
>>   }
>>   EXPORT_SYMBOL(drm_gem_ttm_vmap);
>>   diff --git a/drivers/gpu/drm/drm_gem_vram_helper.c 
>> b/drivers/gpu/drm/drm_gem_vram_helper.c
>> index 6027584406af6..1670f9a459a9d 100644
>> --- a/drivers/gpu/drm/drm_gem_vram_helper.c
>> +++ b/drivers/gpu/drm/drm_gem_vram_helper.c
>> @@ -398,7 +398,7 @@ int drm_gem_vram_vmap(struct drm_gem_vram_object 
>> *gbo, struct iosys_map *map)
>>        * no mapping present.
>>        */
>>       if (iosys_map_is_null(&gbo->map)) {
>> -        ret = ttm_bo_vmap(&gbo->bo, &gbo->map);
>> +        ret = ttm_bo_vmap(&gbo->bo, 0, gbo->bo.base.size, &gbo->map);
>>           if (ret)
>>               return ret;
>>       }
>> diff --git a/drivers/gpu/drm/loongson/lsdc_gem.c 
>> b/drivers/gpu/drm/loongson/lsdc_gem.c
>> index a720d8f532093..f709960c781b9 100644
>> --- a/drivers/gpu/drm/loongson/lsdc_gem.c
>> +++ b/drivers/gpu/drm/loongson/lsdc_gem.c
>> @@ -77,7 +77,7 @@ static int lsdc_gem_object_vmap(struct 
>> drm_gem_object *obj, struct iosys_map *ma
>>           return ret;
>>       }
>>   -    ret = ttm_bo_vmap(tbo, &lbo->map);
>> +    ret = ttm_bo_vmap(tbo, 0, tbo->base.size, &lbo->map);
>>       if (ret) {
>>           drm_err(obj->dev, "ttm bo vmap failed\n");
>>           lsdc_bo_unpin(lbo);
>> diff --git a/drivers/gpu/drm/qxl/qxl_object.c 
>> b/drivers/gpu/drm/qxl/qxl_object.c
>> index 5893e27a7ae50..9f06d5e26a32c 100644
>> --- a/drivers/gpu/drm/qxl/qxl_object.c
>> +++ b/drivers/gpu/drm/qxl/qxl_object.c
>> @@ -164,7 +164,7 @@ int qxl_bo_vmap_locked(struct qxl_bo *bo, struct 
>> iosys_map *map)
>>           goto out;
>>       }
>>   -    r = ttm_bo_vmap(&bo->tbo, &bo->map);
>> +    r = ttm_bo_vmap(&bo->tbo, 0, bo->tbo.base.size, &bo->map);
>>       if (r) {
>>           qxl_bo_unpin_locked(bo);
>>           return r;
>> diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c 
>> b/drivers/gpu/drm/ttm/ttm_bo_util.c
>> index a9df0deff2deb..31f9772f05dac 100644
>> --- a/drivers/gpu/drm/ttm/ttm_bo_util.c
>> +++ b/drivers/gpu/drm/ttm/ttm_bo_util.c
>> @@ -457,17 +457,23 @@ EXPORT_SYMBOL(ttm_bo_kunmap);
>>    * ttm_bo_vmap
>>    *
>>    * @bo: The buffer object.
>> + * @offset: Byte offset into the buffer.
>> + * @size: Number of bytes to map.
>>    * @map: pointer to a struct iosys_map representing the map.
>>    *
>>    * Sets up a kernel virtual mapping, using ioremap or vmap to the
>>    * data in the buffer object. The parameter @map returns the virtual
>>    * address as struct iosys_map. Unmap the buffer with ttm_bo_vunmap().
>> + * The address stored in @map will be aligned to the next lower page
>> + * boundaries.
>>    *
>>    * Returns
>>    * -ENOMEM: Out of memory.
>>    * -EINVAL: Invalid range.
>>    */
>> -int ttm_bo_vmap(struct ttm_buffer_object *bo, struct iosys_map *map)
>> +int ttm_bo_vmap(struct ttm_buffer_object *bo,
>> +        unsigned long offset, unsigned long size,
>> +        struct iosys_map *map)
>>   {
>>       struct ttm_resource *mem = bo->resource;
>>       int ret;
>> @@ -483,18 +489,18 @@ int ttm_bo_vmap(struct ttm_buffer_object *bo, 
>> struct iosys_map *map)
>>           u16 alloc_flags;
>>             if (mem->bus.addr) {
>> -            vaddr_iomem = (void __iomem *)mem->bus.addr;
>> +            vaddr_iomem = (u8 __iomem *)mem->bus.addr + offset;
>>               alloc_flags = ttm_bo_map_premapped;
>>           } else if (mem->bus.caching == ttm_write_combined) {
>> -            vaddr_iomem = ioremap_wc(mem->bus.offset, bo->base.size);
>> +            vaddr_iomem = ioremap_wc(mem->bus.offset + offset, size);
>>               alloc_flags = ttm_bo_map_iomap;
>>   #ifdef CONFIG_X86
>>           } else if (mem->bus.caching == ttm_cached) {
>> -            vaddr_iomem = ioremap_cache(mem->bus.offset, 
>> bo->base.size);
>> +            vaddr_iomem = ioremap_cache(mem->bus.offset + offset, 
>> size);
>>               alloc_flags = ttm_bo_map_iomap;
>>   #endif
>>           } else {
>> -            vaddr_iomem = ioremap(mem->bus.offset, bo->base.size);
>> +            vaddr_iomem = ioremap(mem->bus.offset + offset, size);
>>               alloc_flags = ttm_bo_map_iomap;
>>           }
>>   @@ -510,6 +516,9 @@ int ttm_bo_vmap(struct ttm_buffer_object *bo, 
>> struct iosys_map *map)
>>               .no_wait_gpu = false
>>           };
>>           struct ttm_tt *ttm = bo->ttm;
>> +        unsigned long start_page = offset >> PAGE_SHIFT;
>> +        unsigned long aligned_size = size + (offset - (start_page << 
>> PAGE_SHIFT));
>> +        unsigned long num_pages = DIV_ROUND_UP(aligned_size, 
>> PAGE_SIZE);
>>           pgprot_t prot;
>>           void *vaddr;
>>           u16 alloc_flags;
>> @@ -523,7 +532,7 @@ int ttm_bo_vmap(struct ttm_buffer_object *bo, 
>> struct iosys_map *map)
>>            * or to make the buffer object look contiguous.
>>            */
>>           prot = ttm_io_prot(bo, mem, PAGE_KERNEL);
>> -        vaddr = vmap(ttm->pages, ttm->num_pages, 0, prot);
>> +        vaddr = vmap(ttm->pages + start_page, num_pages, 0, prot);
>>           if (!vaddr)
>>               return -ENOMEM;
>>           alloc_flags = ttm_bo_map_vmap;
>> diff --git a/drivers/gpu/drm/xe/xe_lrc.c b/drivers/gpu/drm/xe/xe_lrc.c
>> index c1bb85d2e243f..3a68fe6d592ed 100644
>> --- a/drivers/gpu/drm/xe/xe_lrc.c
>> +++ b/drivers/gpu/drm/xe/xe_lrc.c
>> @@ -1595,7 +1595,7 @@ void xe_lrc_snapshot_capture_delayed(struct 
>> xe_lrc_snapshot *snapshot)
>>           goto put_bo;
>>         xe_bo_lock(bo, false);
>> -    if (!ttm_bo_vmap(&bo->ttm, &src)) {
>> +    if (!ttm_bo_vmap(&bo->ttm, 0, bo->ttm.base.size, &src)) {
>>           xe_map_memcpy_from(xe_bo_device(bo),
>>                      snapshot->lrc_snapshot, &src, snapshot->lrc_offset,
>>                      snapshot->lrc_size);
>> diff --git a/drivers/gpu/drm/xe/xe_vm.c b/drivers/gpu/drm/xe/xe_vm.c
>> index 99bf7412475c0..81306c32f5d09 100644
>> --- a/drivers/gpu/drm/xe/xe_vm.c
>> +++ b/drivers/gpu/drm/xe/xe_vm.c
>> @@ -3485,7 +3485,7 @@ void xe_vm_snapshot_capture_delayed(struct 
>> xe_vm_snapshot *snap)
>>             if (bo) {
>>               xe_bo_lock(bo, false);
>> -            err = ttm_bo_vmap(&bo->ttm, &src);
>> +            err = ttm_bo_vmap(&bo->ttm, 0, bo->ttm.base.size, &src);
>>               if (!err) {
>>                   xe_map_memcpy_from(xe_bo_device(bo),
>>                              snap->snap[i].data,
>> diff --git a/include/drm/ttm/ttm_bo.h b/include/drm/ttm/ttm_bo.h
>> index 6ccf96c91f3ae..c421ffe3563b1 100644
>> --- a/include/drm/ttm/ttm_bo.h
>> +++ b/include/drm/ttm/ttm_bo.h
>> @@ -375,7 +375,9 @@ int ttm_bo_init_validate(struct ttm_device *bdev, 
>> struct ttm_buffer_object *bo,
>>   int ttm_bo_kmap(struct ttm_buffer_object *bo, unsigned long 
>> start_page,
>>           unsigned long num_pages, struct ttm_bo_kmap_obj *map);
>>   void ttm_bo_kunmap(struct ttm_bo_kmap_obj *map);
>> -int ttm_bo_vmap(struct ttm_buffer_object *bo, struct iosys_map *map);
>> +int ttm_bo_vmap(struct ttm_buffer_object *bo,
>> +        unsigned long offset, unsigned long size,
>> +        struct iosys_map *map);
>>   void ttm_bo_vunmap(struct ttm_buffer_object *bo, struct iosys_map 
>> *map);
>>   int ttm_bo_mmap_obj(struct vm_area_struct *vma, struct 
>> ttm_buffer_object *bo);
>>   int ttm_bo_swapout(struct ttm_buffer_object *bo, struct 
>> ttm_operation_ctx *ctx,
>

-- 
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)


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

end of thread, other threads:[~2024-06-17 13:00 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-06-14 13:21 [PATCH 0/6] drm/{ttm,xe}: Improve ttm_bo_vmap() and update xe Thomas Zimmermann
2024-06-14 13:21 ` [PATCH 1/6] iosys-map: Add allocator flags Thomas Zimmermann
2024-06-14 13:21 ` [PATCH 2/6] drm/ttm: Store the bo_kmap_type in struct iosys_map Thomas Zimmermann
2024-06-14 14:31   ` Christian König
2024-06-17 12:32     ` Thomas Zimmermann
2024-06-17 12:56       ` Christian König
2024-06-14 13:21 ` [PATCH 3/6] drm/ttm: Support partial buffer mappings for ttm_bo_vmap() Thomas Zimmermann
2024-06-14 14:33   ` Christian König
2024-06-17 13:00     ` Thomas Zimmermann
2024-06-14 13:21 ` [PATCH 4/6] drm/ttm: Support kmap for single-page mappings in ttm_bo_vmap() Thomas Zimmermann
2024-06-14 13:21 ` [PATCH 5/6] drm/xe: Remove vunmap calls object-freeing code Thomas Zimmermann
2024-06-14 13:22 ` [PATCH 6/6] drm/xe: Replace ttm_bo_kmap() with ttm_bo_vmap() Thomas Zimmermann
2024-06-14 14:18 ` ✗ Fi.CI.CHECKPATCH: warning for drm/{ttm,xe}: Improve ttm_bo_vmap() and update xe Patchwork
2024-06-14 14:18 ` ✗ Fi.CI.SPARSE: " Patchwork
2024-06-14 14:32 ` ✓ Fi.CI.BAT: success " Patchwork
2024-06-16 21:28 ` ✗ Fi.CI.IGT: failure " Patchwork

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