All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 0/5] drivers: Improve memory management for large object allocations when i915/shmem is used with iommu
@ 2026-07-13  9:58 Krzysztof Karas
  2026-07-13  9:58 ` [PATCH v3 1/5] drm/i915/gem: Count mapped pages in a folio Krzysztof Karas
                   ` (6 more replies)
  0 siblings, 7 replies; 24+ messages in thread
From: Krzysztof Karas @ 2026-07-13  9:58 UTC (permalink / raw)
  To: intel-gfx, dri-devel, iommu
  Cc: Andi Shyti, Robin Murphy, Jason Gunthorpe, Michał Grzelak,
	Janusz Krzysztofik, Sebastian Brzezinka, Krzysztof Niemiec,
	Krzysztof Karas

It was observed that allocating large objects via i915 driver
(igt-gpu-tools/tests/gem_exec_big/single) the folios and their
pages were not handled properly leading to buffer corruptions
during relocations.
Furthermore, using iommu driver in this context would leave
residual mappings in memory that could not be released, hogging
available RAM even after the process ended.

Krzysztof Karas (5):
  drm/i915/gem: Count mapped pages in a folio
  iommu/dma: Catch scatterlist length overflows
  drm/i915/gem: Pull out size validation into a separate function
  drm/i915/gem: Read and shrink memory in a separate function
  drm/i915/gem: Remove iterator and use while loop

 drivers/gpu/drm/i915/gem/i915_gem_shmem.c | 176 +++++++++++++---------
 drivers/iommu/dma-iommu.c                 |  13 +-
 2 files changed, 119 insertions(+), 70 deletions(-)

-- 
2.34.1


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

* [PATCH v3 1/5] drm/i915/gem: Count mapped pages in a folio
  2026-07-13  9:58 [PATCH v3 0/5] drivers: Improve memory management for large object allocations when i915/shmem is used with iommu Krzysztof Karas
@ 2026-07-13  9:58 ` Krzysztof Karas
  2026-07-15 11:18   ` Janusz Krzysztofik
  2026-07-13  9:58 ` [PATCH v3 2/5] iommu/dma: Catch scatterlist length overflows Krzysztof Karas
                   ` (5 subsequent siblings)
  6 siblings, 1 reply; 24+ messages in thread
From: Krzysztof Karas @ 2026-07-13  9:58 UTC (permalink / raw)
  To: intel-gfx, dri-devel, iommu
  Cc: Andi Shyti, Robin Murphy, Jason Gunthorpe, Michał Grzelak,
	Janusz Krzysztofik, Sebastian Brzezinka, Krzysztof Niemiec,
	Krzysztof Karas

With addition of commit 029ae067431a
("drm/i915: Fix potential overflow of shmem scatterlist length")
max_segment size was included in calculating a number of pages
for the scatterlist. This meant that segment sizes considerably
smaller than number of pages in a folio (see shmem_get_pages(),
rebuild_st label for context), were not enough to jump to the
next folio, which has never been a problem before folios have
been intoduced. In result, sg_set_folio() was called multiple
times with nr_pages smaller than folio size, using multitude of
scatterlists, all pointing to the beginning pages of the folio
and never fully covering its range of pages.

Track how many pages have already been counted in a folio to
ensure it is fully covered before reading next folio.

Fixes: 029ae067431a ("drm/i915: Fix potential overflow of shmem scatterlist length")
Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/work_items/15816
Signed-off-by: Krzysztof Karas <krzysztof.karas@intel.com>
---
v3:
 * Fixed a bug that caused first folio to never be considered.

 drivers/gpu/drm/i915/gem/i915_gem_shmem.c | 120 +++++++++++++---------
 1 file changed, 70 insertions(+), 50 deletions(-)

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
index 06543ae60706..0011d76f5b8c 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
@@ -68,10 +68,13 @@ int shmem_sg_alloc_table(struct drm_i915_private *i915, struct sg_table *st,
 			 unsigned int max_segment)
 {
 	unsigned int page_count; /* restricted by sg_alloc_table */
-	unsigned long i;
+	unsigned long next_pfn = 0; /* suppress gcc warning */
+	unsigned long folio_start = 0;
+	unsigned long folio_end = 0;
+	struct folio *folio = NULL;
 	struct scatterlist *sg;
-	unsigned long next_pfn = 0;	/* suppress gcc warning */
 	gfp_t noreclaim;
+	unsigned long i;
 	int ret;
 
 	if (overflows_type(size / PAGE_SIZE, page_count))
@@ -101,7 +104,7 @@ int shmem_sg_alloc_table(struct drm_i915_private *i915, struct sg_table *st,
 	sg = st->sgl;
 	st->nents = 0;
 	for (i = 0; i < page_count; i++) {
-		struct folio *folio;
+		unsigned long folio_page_index = 0;
 		unsigned long nr_pages;
 		const unsigned int shrink[] = {
 			I915_SHRINK_BOUND | I915_SHRINK_UNBOUND,
@@ -109,71 +112,87 @@ int shmem_sg_alloc_table(struct drm_i915_private *i915, struct sg_table *st,
 		}, *s = shrink;
 		gfp_t gfp = noreclaim;
 
-		do {
-			cond_resched();
-			folio = shmem_read_folio_gfp(mapping, i, gfp);
-			if (!IS_ERR(folio))
-				break;
-
-			if (!*s) {
-				ret = PTR_ERR(folio);
-				goto err_sg;
-			}
-
-			i915_gem_shrink(NULL, i915, 2 * page_count, NULL, *s++);
-
-			/*
-			 * We've tried hard to allocate the memory by reaping
-			 * our own buffer, now let the real VM do its job and
-			 * go down in flames if truly OOM.
-			 *
-			 * However, since graphics tend to be disposable,
-			 * defer the oom here by reporting the ENOMEM back
-			 * to userspace.
-			 */
-			if (!*s) {
-				/* reclaim and warn, but no oom */
-				gfp = mapping_gfp_mask(mapping);
+		/* Grab the next folio if we exhausted the current one. */
+		if (!i || i > folio_end) {
+			do {
+				cond_resched();
+				folio = shmem_read_folio_gfp(mapping, i, gfp);
+				if (!IS_ERR(folio))
+					break;
+
+				if (!*s) {
+					ret = PTR_ERR(folio);
+					goto err_sg;
+				}
+
+				i915_gem_shrink(NULL, i915, 2 * page_count, NULL, *s++);
 
 				/*
-				 * Our bo are always dirty and so we require
-				 * kswapd to reclaim our pages (direct reclaim
-				 * does not effectively begin pageout of our
-				 * buffers on its own). However, direct reclaim
-				 * only waits for kswapd when under allocation
-				 * congestion. So as a result __GFP_RECLAIM is
-				 * unreliable and fails to actually reclaim our
-				 * dirty pages -- unless you try over and over
-				 * again with !__GFP_NORETRY. However, we still
-				 * want to fail this allocation rather than
-				 * trigger the out-of-memory killer and for
-				 * this we want __GFP_RETRY_MAYFAIL.
-				 */
-				gfp |= __GFP_RETRY_MAYFAIL | __GFP_NOWARN;
-			}
-		} while (1);
+				* We've tried hard to allocate the memory by reaping
+				* our own buffer, now let the real VM do its job and
+				* go down in flames if truly OOM.
+				*
+				* However, since graphics tend to be disposable,
+				* defer the oom here by reporting the ENOMEM back
+				* to userspace.
+				*/
+				if (!*s) {
+					/* reclaim and warn, but no oom */
+					gfp = mapping_gfp_mask(mapping);
+
+					/*
+					 * Our bo are always dirty and so we require
+					 * kswapd to reclaim our pages (direct reclaim
+					 * does not effectively begin pageout of our
+					 * buffers on its own). However, direct reclaim
+					 * only waits for kswapd when under allocation
+					 * congestion. So as a result __GFP_RECLAIM is
+					 * unreliable and fails to actually reclaim our
+					 * dirty pages -- unless you try over and over
+					 * again with !__GFP_NORETRY. However, we still
+					 * want to fail this allocation rather than
+					 * trigger the out-of-memory killer and for
+					 * this we want __GFP_RETRY_MAYFAIL.
+					 */
+					gfp |= __GFP_RETRY_MAYFAIL | __GFP_NOWARN;
+				}
+			} while (1);
+
+			folio_start = folio_pgoff(folio);
+			folio_end = folio_start + folio_nr_pages(folio) - 1;
+		}
+
+		folio_page_index = i - folio_start;
+		if (WARN_ON_ONCE(folio_page_index >= folio_nr_pages(folio))) {
+			ret = -EINVAL;
+			folio_put(folio);
+			goto err_sg;
+		}
 
 		nr_pages = min_array(((unsigned long[]) {
-					folio_nr_pages(folio),
+					folio_nr_pages(folio) - folio_page_index,
 					page_count - i,
-					max_segment / PAGE_SIZE,
+					max_t(unsigned int, 1, max_segment / PAGE_SIZE),
 				      }), 3);
 
 		if (!i ||
 		    sg->length >= max_segment ||
-		    folio_pfn(folio) != next_pfn) {
+		    folio_pfn(folio) + folio_page_index != next_pfn) {
 			if (i)
 				sg = sg_next(sg);
 
 			st->nents++;
-			sg_set_folio(sg, folio, nr_pages * PAGE_SIZE, 0);
+			sg_set_page(sg, folio_page(folio, folio_page_index),
+				    nr_pages * PAGE_SIZE, 0);
 		} else {
 			nr_pages = min_t(unsigned long, nr_pages,
-					 (max_segment - sg->length) / PAGE_SIZE);
+					 max_t(unsigned long, 1,
+					       (max_segment - sg->length) / PAGE_SIZE));
 
 			sg->length += nr_pages * PAGE_SIZE;
 		}
-		next_pfn = folio_pfn(folio) + nr_pages;
+
+		next_pfn = folio_pfn(folio) + folio_page_index + nr_pages;
 		i += nr_pages - 1;
 
 		/* Check that the i965g/gm workaround works. */
@@ -186,6 +205,7 @@ int shmem_sg_alloc_table(struct drm_i915_private *i915, struct sg_table *st,
 	i915_sg_trim(st);
 
 	return 0;
+
 err_sg:
 	sg_mark_end(sg);
 	if (sg != st->sgl) {
-- 
2.34.1


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

* [PATCH v3 2/5] iommu/dma: Catch scatterlist length overflows
  2026-07-13  9:58 [PATCH v3 0/5] drivers: Improve memory management for large object allocations when i915/shmem is used with iommu Krzysztof Karas
  2026-07-13  9:58 ` [PATCH v3 1/5] drm/i915/gem: Count mapped pages in a folio Krzysztof Karas
@ 2026-07-13  9:58 ` Krzysztof Karas
  2026-07-13 10:13   ` sashiko-bot
                     ` (2 more replies)
  2026-07-13  9:58 ` [PATCH v3 3/5] drm/i915/gem: Pull out size validation into a separate function Krzysztof Karas
                   ` (4 subsequent siblings)
  6 siblings, 3 replies; 24+ messages in thread
From: Krzysztof Karas @ 2026-07-13  9:58 UTC (permalink / raw)
  To: intel-gfx, dri-devel, iommu
  Cc: Andi Shyti, Robin Murphy, Jason Gunthorpe, Michał Grzelak,
	Janusz Krzysztofik, Sebastian Brzezinka, Krzysztof Niemiec,
	Krzysztof Karas

It is possible, when a very large mapping uses only one
scatterlist, that padding overflows scatterlist's length field.
This results in:
 1) silently wrapping the value
 2) smaller than desired mappings produced by iommu_map_sg
 3) leaving mapped bytes in memory (no iommu_unmap)

Address this issue by adding overflow detection for scatterlist
length field.

Fixes: 809eac54cdd6 ("iommu/dma: Implement scatterlist segment merging")
Signed-off-by: Krzysztof Karas <krzysztof.karas@intel.com>
---
v3:
 * Used check_add_overflow suggested by Jason.

I decided not to include previous r-bs due to the change in the
core of this patch: overflows_type -> check_add_overflow and I
obvserved some folks have heavy preference for one or the other.

 drivers/iommu/dma-iommu.c | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c
index 381b60d9e7ce..1a36fd9bf10b 100644
--- a/drivers/iommu/dma-iommu.c
+++ b/drivers/iommu/dma-iommu.c
@@ -1493,7 +1493,18 @@ int iommu_dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
 		 *   time through here (i.e. before it has a meaningful value).
 		 */
 		if (pad_len && pad_len < s_length - 1) {
-			prev->length += pad_len;
+			unsigned int new_pad_len;
+			/*
+			 * For large mappings spanning multiple GBs we
+			 * may not be able to fit all needed padding into
+			 * sg->length.
+			 */
+			if (check_add_overflow(prev->length, pad_len, &new_pad_len)) {
+				ret = -EOVERFLOW;
+				goto out_restore_sg;
+			}
+
+			prev->length = new_pad_len;
 			iova_len += pad_len;
 		}
 
-- 
2.34.1


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

* [PATCH v3 3/5] drm/i915/gem: Pull out size validation into a separate function
  2026-07-13  9:58 [PATCH v3 0/5] drivers: Improve memory management for large object allocations when i915/shmem is used with iommu Krzysztof Karas
  2026-07-13  9:58 ` [PATCH v3 1/5] drm/i915/gem: Count mapped pages in a folio Krzysztof Karas
  2026-07-13  9:58 ` [PATCH v3 2/5] iommu/dma: Catch scatterlist length overflows Krzysztof Karas
@ 2026-07-13  9:58 ` Krzysztof Karas
  2026-07-15 15:21   ` Janusz Krzysztofik
  2026-07-13  9:58 ` [PATCH v3 4/5] drm/i915/gem: Read and shrink memory in " Krzysztof Karas
                   ` (3 subsequent siblings)
  6 siblings, 1 reply; 24+ messages in thread
From: Krzysztof Karas @ 2026-07-13  9:58 UTC (permalink / raw)
  To: intel-gfx, dri-devel, iommu
  Cc: Andi Shyti, Robin Murphy, Jason Gunthorpe, Michał Grzelak,
	Janusz Krzysztofik, Sebastian Brzezinka, Krzysztof Niemiec,
	Krzysztof Karas

shmem_sg_alloc_table is a very large and hard to read function,
so reduce the number of operations it is responsible for by
placing "size" validation in a new helper.

Signed-off-by: Krzysztof Karas <krzysztof.karas@intel.com>
---
v3:
 * Split refactoring and put it after the fix in shmem folio
  counting suggested by Andi.

 drivers/gpu/drm/i915/gem/i915_gem_shmem.c | 29 ++++++++++++++++-------
 1 file changed, 20 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
index 0011d76f5b8c..4a61b012fb6f 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
@@ -62,6 +62,22 @@ void shmem_sg_free_table(struct sg_table *st, struct address_space *mapping,
 	sg_free_table(st);
 }
 
+static int validate_size(size_t size, unsigned int page_count,
+			 struct intel_memory_region *mr)
+{
+	if (overflows_type(size / PAGE_SIZE, page_count))
+		return -E2BIG;
+
+	/*
+	 * If there's no chance of allocating enough pages for the whole
+	 * object, bail early.
+	 */
+	if (size > resource_size(&mr->region))
+		return -ENOMEM;
+
+	return 0;
+}
+
 int shmem_sg_alloc_table(struct drm_i915_private *i915, struct sg_table *st,
 			 size_t size, struct intel_memory_region *mr,
 			 struct address_space *mapping,
@@ -77,16 +93,11 @@ int shmem_sg_alloc_table(struct drm_i915_private *i915, struct sg_table *st,
 	unsigned long i;
 	int ret;
 
-	if (overflows_type(size / PAGE_SIZE, page_count))
-		return -E2BIG;
-
 	page_count = size / PAGE_SIZE;
-	/*
-	 * If there's no chance of allocating enough pages for the whole
-	 * object, bail early.
-	 */
-	if (size > resource_size(&mr->region))
-		return -ENOMEM;
+
+	ret = validate_size(size, page_count, mr);
+	if (ret < 0)
+		return ret;
 
 	if (sg_alloc_table(st, page_count, GFP_KERNEL | __GFP_NOWARN))
 		return -ENOMEM;
-- 
2.34.1


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

* [PATCH v3 4/5] drm/i915/gem: Read and shrink memory in a separate function
  2026-07-13  9:58 [PATCH v3 0/5] drivers: Improve memory management for large object allocations when i915/shmem is used with iommu Krzysztof Karas
                   ` (2 preceding siblings ...)
  2026-07-13  9:58 ` [PATCH v3 3/5] drm/i915/gem: Pull out size validation into a separate function Krzysztof Karas
@ 2026-07-13  9:58 ` Krzysztof Karas
  2026-07-13 10:10   ` sashiko-bot
  2026-07-15 15:31   ` Janusz Krzysztofik
  2026-07-13  9:58 ` [PATCH v3 5/5] drm/i915/gem: Remove iterator and use while loop Krzysztof Karas
                   ` (2 subsequent siblings)
  6 siblings, 2 replies; 24+ messages in thread
From: Krzysztof Karas @ 2026-07-13  9:58 UTC (permalink / raw)
  To: intel-gfx, dri-devel, iommu
  Cc: Andi Shyti, Robin Murphy, Jason Gunthorpe, Michał Grzelak,
	Janusz Krzysztofik, Sebastian Brzezinka, Krzysztof Niemiec,
	Krzysztof Karas

Continue unloading shmem_sg_alloc_table by placing reading
folios and shrink call into a new helper.
Make the loop a bit more reader-friendly by removing iteration
over a structure and replacing it with a do-while loop.

Signed-off-by: Krzysztof Karas <krzysztof.karas@intel.com>
---
v3:
 * Split refactoring and put it after the fix in shmem folio
  counting suggested by Andi.
 * Use do-while loop suggested by Robin. 

 drivers/gpu/drm/i915/gem/i915_gem_shmem.c | 102 ++++++++++++----------
 1 file changed, 55 insertions(+), 47 deletions(-)

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
index 4a61b012fb6f..7c8de8fe0a22 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
@@ -78,6 +78,55 @@ static int validate_size(size_t size, unsigned int page_count,
 	return 0;
 }
 
+static struct folio *shmem_shrink_get_folio(struct address_space *mapping,
+					    unsigned long folio_index,
+					    gfp_t gfp, unsigned int page_count,
+					    struct drm_i915_private *i915)
+{
+	struct folio *folio = NULL;
+	unsigned int retries = 2;
+
+	do {
+		cond_resched();
+		folio = shmem_read_folio_gfp(mapping, folio_index, gfp);
+		if (IS_ERR(folio)) {
+			i915_gem_shrink(NULL, i915, 2 * page_count, NULL,
+					I915_SHRINK_BOUND | I915_SHRINK_UNBOUND);
+
+			/*
+			 * We've tried hard to allocate the memory by reaping
+			 * our own buffer, now let the real VM do its job and
+			 * go down in flames if truly OOM.
+			 *
+			 * However, since graphics tend to be disposable,
+			 * defer the oom here by reporting the ENOMEM back
+			 * to userspace.
+			 *
+			 * Reclaim and warn, but no oom.
+			 */
+			gfp = mapping_gfp_mask(mapping);
+
+			/*
+			 * Our bo are always dirty and so we require
+			 * kswapd to reclaim our pages (direct reclaim
+			 * does not effectively begin pageout of our
+			 * buffers on its own). However, direct reclaim
+			 * only waits for kswapd when under allocation
+			 * congestion. So as a result __GFP_RECLAIM is
+			 * unreliable and fails to actually reclaim our
+			 * dirty pages -- unless you try over and over
+			 * again with !__GFP_NORETRY. However, we still
+			 * want to fail this allocation rather than
+			 * trigger the out-of-memory killer and for
+			 * this we want __GFP_RETRY_MAYFAIL.
+			 */
+			gfp |= __GFP_RETRY_MAYFAIL | __GFP_NOWARN;
+		}
+	} while (IS_ERR(folio) && --retries);
+
+	return folio;
+}
+
 int shmem_sg_alloc_table(struct drm_i915_private *i915, struct sg_table *st,
 			 size_t size, struct intel_memory_region *mr,
 			 struct address_space *mapping,
@@ -117,57 +166,16 @@ int shmem_sg_alloc_table(struct drm_i915_private *i915, struct sg_table *st,
 	for (i = 0; i < page_count; i++) {
 		unsigned long folio_page_index = 0;
 		unsigned long nr_pages;
-		const unsigned int shrink[] = {
-			I915_SHRINK_BOUND | I915_SHRINK_UNBOUND,
-			0,
-		}, *s = shrink;
 		gfp_t gfp = noreclaim;
 
 		/* Grab the next folio if we exhausted the current one. */
 		if (!i || i > folio_end) {
-			do {
-				cond_resched();
-				folio = shmem_read_folio_gfp(mapping, i, gfp);
-				if (!IS_ERR(folio))
-					break;
-
-				if (!*s) {
-					ret = PTR_ERR(folio);
-					goto err_sg;
-				}
-
-				i915_gem_shrink(NULL, i915, 2 * page_count, NULL, *s++);
-
-				/*
-				* We've tried hard to allocate the memory by reaping
-				* our own buffer, now let the real VM do its job and
-				* go down in flames if truly OOM.
-				*
-				* However, since graphics tend to be disposable,
-				* defer the oom here by reporting the ENOMEM back
-				* to userspace.
-				*/
-				if (!*s) {
-					/* reclaim and warn, but no oom */
-					gfp = mapping_gfp_mask(mapping);
-
-					/*
-					 * Our bo are always dirty and so we require
-					 * kswapd to reclaim our pages (direct reclaim
-					 * does not effectively begin pageout of our
-					 * buffers on its own). However, direct reclaim
-					 * only waits for kswapd when under allocation
-					 * congestion. So as a result __GFP_RECLAIM is
-					 * unreliable and fails to actually reclaim our
-					 * dirty pages -- unless you try over and over
-					 * again with !__GFP_NORETRY. However, we still
-					 * want to fail this allocation rather than
-					 * trigger the out-of-memory killer and for
-					 * this we want __GFP_RETRY_MAYFAIL.
-					 */
-					gfp |= __GFP_RETRY_MAYFAIL | __GFP_NOWARN;
-				}
-			} while (1);
+			folio = shmem_shrink_get_folio(mapping, i, gfp,
+						       page_count, i915);
+			if (IS_ERR(folio)) {
+				ret = PTR_ERR(folio);
+				goto err_sg;
+			}
 
 			folio_start = folio_pgoff(folio);
 			folio_end = folio_start + folio_nr_pages(folio) - 1;
-- 
2.34.1


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

* [PATCH v3 5/5] drm/i915/gem: Remove iterator and use while loop
  2026-07-13  9:58 [PATCH v3 0/5] drivers: Improve memory management for large object allocations when i915/shmem is used with iommu Krzysztof Karas
                   ` (3 preceding siblings ...)
  2026-07-13  9:58 ` [PATCH v3 4/5] drm/i915/gem: Read and shrink memory in " Krzysztof Karas
@ 2026-07-13  9:58 ` Krzysztof Karas
  2026-07-13 10:09   ` sashiko-bot
  2026-07-15 17:04   ` Janusz Krzysztofik
  2026-07-13 11:01 ` ✓ i915.CI.BAT: success for drivers: Improve memory management for large object allocations when i915/shmem is used with iommu Patchwork
  2026-07-13 14:14 ` ✗ i915.CI.Full: failure " Patchwork
  6 siblings, 2 replies; 24+ messages in thread
From: Krzysztof Karas @ 2026-07-13  9:58 UTC (permalink / raw)
  To: intel-gfx, dri-devel, iommu
  Cc: Andi Shyti, Robin Murphy, Jason Gunthorpe, Michał Grzelak,
	Janusz Krzysztofik, Sebastian Brzezinka, Krzysztof Niemiec,
	Krzysztof Karas

Change the main "for" loop into "while" to get rid of obscure
iterator "i" and use more descriptive name to indicate how many
pages were already covered. Detect first loop with st->nents and
put instructions for that case in their own block for easier
reading.

Signed-off-by: Krzysztof Karas <krzysztof.karas@intel.com>
---
v3:
 * Split refactoring and put it after the fix in shmem folio
  counting suggested by Andi.

 drivers/gpu/drm/i915/gem/i915_gem_shmem.c | 29 +++++++++++------------
 1 file changed, 14 insertions(+), 15 deletions(-)

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
index 7c8de8fe0a22..66d0f8f6ffcc 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
@@ -135,11 +135,11 @@ int shmem_sg_alloc_table(struct drm_i915_private *i915, struct sg_table *st,
 	unsigned int page_count; /* restricted by sg_alloc_table */
 	unsigned long next_pfn = 0; /* suppress gcc warning */
 	unsigned long folio_start = 0;
+	unsigned long pages_done = 0;
 	unsigned long folio_end = 0;
 	struct folio *folio = NULL;
 	struct scatterlist *sg;
 	gfp_t noreclaim;
-	unsigned long i;
 	int ret;
 
 	page_count = size / PAGE_SIZE;
@@ -163,15 +163,15 @@ int shmem_sg_alloc_table(struct drm_i915_private *i915, struct sg_table *st,
 
 	sg = st->sgl;
 	st->nents = 0;
-	for (i = 0; i < page_count; i++) {
+	while (pages_done < page_count) {
 		unsigned long folio_page_index = 0;
 		unsigned long nr_pages;
 		gfp_t gfp = noreclaim;
 
 		/* Grab the next folio if we exhausted the current one. */
-		if (!i || i > folio_end) {
-			folio = shmem_shrink_get_folio(mapping, i, gfp,
-						       page_count, i915);
+		if (!pages_done || pages_done > folio_end) {
+			folio = shmem_shrink_get_folio(mapping, pages_done, gfp,
+						       page_count - pages_done, i915);
 			if (IS_ERR(folio)) {
 				ret = PTR_ERR(folio);
 				goto err_sg;
@@ -181,7 +181,7 @@ int shmem_sg_alloc_table(struct drm_i915_private *i915, struct sg_table *st,
 			folio_end = folio_start + folio_nr_pages(folio) - 1;
 		}
 
-		folio_page_index = i - folio_start;
+		folio_page_index = pages_done - folio_start;
 		if (WARN_ON_ONCE(folio_page_index >= folio_nr_pages(folio))) {
 			ret = -EINVAL;
 			folio_put(folio);
@@ -190,16 +190,15 @@ int shmem_sg_alloc_table(struct drm_i915_private *i915, struct sg_table *st,
 
 		nr_pages = min_array(((unsigned long[]) {
 					folio_nr_pages(folio) - folio_page_index,
-					page_count - i,
+					page_count - pages_done,
 					max_t(unsigned int, 1, max_segment / PAGE_SIZE),
 				      }), 3);
-
-		if (!i ||
-		    sg->length >= max_segment ||
-		    folio_pfn(folio) + folio_page_index != next_pfn) {
-			if (i)
-				sg = sg_next(sg);
-
+		if (!st->nents) {
+			st->nents++;
+			sg_set_page(sg, folio_page(folio, 0), nr_pages * PAGE_SIZE, 0);
+		} else if (sg->length >= max_segment ||
+			   folio_pfn(folio) + folio_page_index != next_pfn) {
+			sg = sg_next(sg);
 			st->nents++;
 			sg_set_page(sg, folio_page(folio, folio_page_index),
 				    nr_pages * PAGE_SIZE, 0);
@@ -212,7 +211,7 @@ int shmem_sg_alloc_table(struct drm_i915_private *i915, struct sg_table *st,
 		}
 
 		next_pfn = folio_pfn(folio) + folio_page_index + nr_pages;
-		i += nr_pages - 1;
+		pages_done += nr_pages;
 
 		/* Check that the i965g/gm workaround works. */
 		GEM_BUG_ON(gfp & __GFP_DMA32 && next_pfn >= 0x00100000UL);
-- 
2.34.1


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

* Re: [PATCH v3 5/5] drm/i915/gem: Remove iterator and use while loop
  2026-07-13  9:58 ` [PATCH v3 5/5] drm/i915/gem: Remove iterator and use while loop Krzysztof Karas
@ 2026-07-13 10:09   ` sashiko-bot
  2026-07-15 17:04   ` Janusz Krzysztofik
  1 sibling, 0 replies; 24+ messages in thread
From: sashiko-bot @ 2026-07-13 10:09 UTC (permalink / raw)
  To: Krzysztof Karas; +Cc: dri-devel

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:

Pre-existing issues:
- [High] Pinned folios are permanently leaked in the error path if an allocation fails before the scatterlist pointer `sg` is advanced past the first entry.
--

--- Patch [5]: [PATCH v3 5/5] drm/i915/gem: Remove iterator and use while loop ---
commit f3eba03d9fc5ce905a11cce1578d72ea21a144f1
Author: Krzysztof Karas <krzysztof.karas@intel.com>

drm/i915/gem: Remove iterator and use while loop

This commit changes the main "for" loop into a "while" loop to get rid of
the obscure iterator "i" and use a more descriptive name to indicate how
many pages were already covered.

> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
> index 7c8de8fe0a225..66d0f8f6ffccb 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c

[ ... ]

> @@ -212,7 +211,7 @@ int shmem_sg_alloc_table(struct drm_i915_private *i915, struct sg_table *st,
>  		}
>  
>  		next_pfn = folio_pfn(folio) + folio_page_index + nr_pages;
> -		i += nr_pages - 1;
> +		pages_done += nr_pages;
>  
>  		/* Check that the i965g/gm workaround works. */
>  		GEM_BUG_ON(gfp & __GFP_DMA32 && next_pfn >= 0x00100000UL);

[Severity: High]
This isn't a bug introduced by this patch, but looking at the error handling
in shmem_sg_alloc_table() in drivers/gpu/drm/i915/gem/i915_gem_shmem.c (around
line 228), is it possible to leak pinned folios?

If an allocation fails after successfully allocating the first folio(s) into
the first scatterlist entry, st->nents will be 1 but sg will still equal
st->sgl. The error path jumps to err_sg:

err_sg:
	sg_mark_end(sg);
	if (sg != st->sgl) {
		shmem_sg_free_table(st, mapping, false, false);
	} else {
		mapping_clear_unevictable(mapping);
		sg_free_table(st);
	}

Since sg == st->sgl, this takes the else branch and bypasses
shmem_sg_free_table(), leaving the folios in the first scatterlist entry
pinned. Would checking if (st->nents > 0) be more appropriate here?

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260713095812.1014365-1-krzysztof.karas@intel.com?part=5

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

* Re: [PATCH v3 4/5] drm/i915/gem: Read and shrink memory in a separate function
  2026-07-13  9:58 ` [PATCH v3 4/5] drm/i915/gem: Read and shrink memory in " Krzysztof Karas
@ 2026-07-13 10:10   ` sashiko-bot
  2026-07-15 15:31   ` Janusz Krzysztofik
  1 sibling, 0 replies; 24+ messages in thread
From: sashiko-bot @ 2026-07-13 10:10 UTC (permalink / raw)
  To: Krzysztof Karas; +Cc: dri-devel

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] Unnecessary double execution of the memory shrinker on the allocation failure path.
--

--- Patch [4]: [PATCH v3 4/5] drm/i915/gem: Read and shrink memory in a separate function ---
commit 323006b149f5bd15e61d31522a7aa9cdbf860e09
Author: Krzysztof Karas <krzysztof.karas@intel.com>

drm/i915/gem: Read and shrink memory in a separate function

This commit extracts the memory reading and shrinking logic from
shmem_sg_alloc_table into a new shmem_shrink_get_folio helper. It also
replaces the previous array-based iteration with a do-while loop.

> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
> --- a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
[ ... ]
> @@ -78,6 +78,55 @@ static int validate_size(size_t size, unsigned int page_count,
>  	return 0;
>  }
>  
> +static struct folio *shmem_shrink_get_folio(struct address_space *mapping,
> +					    unsigned long folio_index,
> +					    gfp_t gfp, unsigned int page_count,
> +					    struct drm_i915_private *i915)
> +{
> +	struct folio *folio = NULL;
> +	unsigned int retries = 2;
> +
> +	do {
> +		cond_resched();
> +		folio = shmem_read_folio_gfp(mapping, folio_index, gfp);
> +		if (IS_ERR(folio)) {
> +			i915_gem_shrink(NULL, i915, 2 * page_count, NULL,
> +					I915_SHRINK_BOUND | I915_SHRINK_UNBOUND);

[Severity: Medium]
Will this result in an unnecessary double execution of the memory shrinker
when allocations fail?

In the original code, the array-based state machine checked the shrink state
and jumped to the error path before calling i915_gem_shrink again on the
final failure. With the refactored do-while loop, if the second
shmem_read_folio_gfp call fails, the loop unconditionally executes the
shrinker a second time before decrementing the retries counter to 0 and
exiting.

Could this waste CPU cycles and increase lock contention on i915->mm.obj_lock
immediately before returning -ENOMEM to the caller, considering the memory
freed by this second pass is completely ignored?

> +
> +			/*
> +			 * We've tried hard to allocate the memory by reaping
[ ... ]

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260713095812.1014365-1-krzysztof.karas@intel.com?part=4

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

* Re: [PATCH v3 2/5] iommu/dma: Catch scatterlist length overflows
  2026-07-13  9:58 ` [PATCH v3 2/5] iommu/dma: Catch scatterlist length overflows Krzysztof Karas
@ 2026-07-13 10:13   ` sashiko-bot
  2026-07-16 12:39   ` Andi Shyti
  2026-07-16 13:48   ` Robin Murphy
  2 siblings, 0 replies; 24+ messages in thread
From: sashiko-bot @ 2026-07-13 10:13 UTC (permalink / raw)
  To: Krzysztof Karas; +Cc: dri-devel

Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:

Pre-existing issues:
- [High] `__invalidate_sg()` corrupts unprocessed scatterlist segments on mapping failure if the scatterlist was previously mapped.
- [High] Silent truncation of `s->length` during IOVA alignment leads to IOMMU page table memory leak.
--

--- Patch [2]: [PATCH v3 2/5] iommu/dma: Catch scatterlist length overflows ---
commit 9f9c6b9481d1f01d396391f99642a7f233aa6651
Author: Krzysztof Karas <krzysztof.karas@intel.com>

iommu/dma: Catch scatterlist length overflows

This commit adds an overflow detection for the scatterlist length field
padding in iommu_dma_map_sg(). When a very large mapping uses only one
scatterlist, padding could overflow the length field resulting in small
mappings and left-over bytes in memory.

> diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c
> index 9abaec0703efb..39da61b4e549e 100644
> --- a/drivers/iommu/dma-iommu.c
> +++ b/drivers/iommu/dma-iommu.c
[ ... ]
> @@ -1493,7 +1493,18 @@ int iommu_dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
>  		 *   time through here (i.e. before it has a meaningful value).
>  		 */
>  		if (pad_len && pad_len < s_length - 1) {
> -			prev->length += pad_len;
> +			unsigned int new_pad_len;
> +			/*
> +			 * For large mappings spanning multiple GBs we
> +			 * may not be able to fit all needed padding into
> +			 * sg->length.
> +			 */
> +			if (check_add_overflow(prev->length, pad_len, &new_pad_len)) {
> +				ret = -EOVERFLOW;
> +				goto out_restore_sg;

[Severity: High]
This is a pre-existing issue, but does jumping to out_restore_sg here
corrupt unprocessed scatterlist segments if the list was previously mapped?

If a driver maps, unmaps, and then re-maps a scatterlist, the unmap step
does not reset sg_dma_address() to DMA_MAPPING_ERROR. When this new error
path triggers, __invalidate_sg() will iterate over all segments. For the
unprocessed segments that still contain valid DMA addresses from the previous
mapping, __invalidate_sg() will incorrectly assume they were modified:

drivers/iommu/dma-iommu.c:__invalidate_sg() {
    ...
			if (sg_dma_address(s) != DMA_MAPPING_ERROR)
				s->offset += sg_dma_address(s);
			if (sg_dma_len(s))
				s->length = sg_dma_len(s);
    ...
}

Could this overwrite the physical boundaries of the segments, potentially
leading to memory corruption on subsequent DMA operations?

> +			}
> +
> +			prev->length = new_pad_len;
>  			iova_len += pad_len;
>  		}

[Severity: High]
This isn't a bug introduced by this patch, but while handling large mappings
spanning multiple GBs, can s->length be silently truncated earlier in this
loop?

Before the padding step, the size_t s_length is aligned and assigned back to
s->length (which is a 32-bit unsigned int):

drivers/iommu/dma-iommu.c:iommu_dma_map_sg() {
    ...
		s_length = iova_align(iovad, s_length + s_iova_off);
		s->length = s_length;
    ...
}

If the aligned size_t exceeds UINT_MAX, it truncates. The iova_len
calculation uses the non-truncated size_t, allocating correct IOVA space,
but iommu_map_sg() will use the truncated s->length, mapping fewer bytes.

Since iommu_map_sg() succeeds in mapping the smaller size, it returns a
positive value. This triggers the error path:

drivers/iommu/dma-iommu.c:iommu_dma_map_sg() {
    ...
	ret = iommu_map_sg(domain, iova, sg, nents, prot, GFP_ATOMIC);
	if (ret < 0 || ret < iova_len)
		goto out_free_iova;
    ...
out_free_iova:
	iommu_dma_free_iova(domain, iova, iova_len, NULL);
    ...
}

Because out_free_iova only frees the IOVA allocator region and does not call
iommu_unmap(), does this permanently leak the hardware IOMMU page table
entries?

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260713095812.1014365-1-krzysztof.karas@intel.com?part=2

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

* ✓ i915.CI.BAT: success for drivers: Improve memory management for large object allocations when i915/shmem is used with iommu
  2026-07-13  9:58 [PATCH v3 0/5] drivers: Improve memory management for large object allocations when i915/shmem is used with iommu Krzysztof Karas
                   ` (4 preceding siblings ...)
  2026-07-13  9:58 ` [PATCH v3 5/5] drm/i915/gem: Remove iterator and use while loop Krzysztof Karas
@ 2026-07-13 11:01 ` Patchwork
  2026-07-13 14:14 ` ✗ i915.CI.Full: failure " Patchwork
  6 siblings, 0 replies; 24+ messages in thread
From: Patchwork @ 2026-07-13 11:01 UTC (permalink / raw)
  To: Krzysztof Karas; +Cc: intel-gfx

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

== Series Details ==

Series: drivers: Improve memory management for large object allocations when i915/shmem is used with iommu
URL   : https://patchwork.freedesktop.org/series/170304/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_18810 -> Patchwork_170304v1
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

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

Participating hosts (42 -> 40)
------------------------------

  Missing    (2): bat-dg2-13 fi-snb-2520m 


Changes
-------

  No changes found


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

  * Linux: CI_DRM_18810 -> Patchwork_170304v1

  CI-20190529: 20190529
  CI_DRM_18810: 83d782d98f4ebb4a10b8ee107e3a389917e0b218 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_9003: 9003
  Patchwork_170304v1: 83d782d98f4ebb4a10b8ee107e3a389917e0b218 @ git://anongit.freedesktop.org/gfx-ci/linux

== Logs ==

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

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

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

* ✗ i915.CI.Full: failure for drivers: Improve memory management for large object allocations when i915/shmem is used with iommu
  2026-07-13  9:58 [PATCH v3 0/5] drivers: Improve memory management for large object allocations when i915/shmem is used with iommu Krzysztof Karas
                   ` (5 preceding siblings ...)
  2026-07-13 11:01 ` ✓ i915.CI.BAT: success for drivers: Improve memory management for large object allocations when i915/shmem is used with iommu Patchwork
@ 2026-07-13 14:14 ` Patchwork
  6 siblings, 0 replies; 24+ messages in thread
From: Patchwork @ 2026-07-13 14:14 UTC (permalink / raw)
  To: Krzysztof Karas; +Cc: intel-gfx

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

== Series Details ==

Series: drivers: Improve memory management for large object allocations when i915/shmem is used with iommu
URL   : https://patchwork.freedesktop.org/series/170304/
State : failure

== Summary ==

CI Bug Log - changes from CI_DRM_18810_full -> Patchwork_170304v1_full
====================================================

Summary
-------

  **FAILURE**

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

  

Participating hosts (10 -> 10)
------------------------------

  No changes in participating hosts

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

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

### IGT changes ###

#### Possible regressions ####

  * igt@syncobj_timeline:
    - shard-dg2:          NOTRUN -> [INCOMPLETE][1]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg2-4/igt@syncobj_timeline.html

  
New tests
---------

  New tests have been introduced between CI_DRM_18810_full and Patchwork_170304v1_full:

### New IGT tests (3) ###

  * igt@syncobj_timeline@rc6:
    - Statuses :
    - Exec time: [None] s

  * igt@syncobj_timeline@static-toggle-suspend:
    - Statuses :
    - Exec time: [None] s

  * igt@syncobj_timeline@system-suspend-execbuf:
    - Statuses :
    - Exec time: [None] s

  

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

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

### IGT changes ###

#### Issues hit ####

  * igt@api_intel_bb@blit-reloc-keep-cache:
    - shard-rkl:          NOTRUN -> [SKIP][2] ([i915#8411])
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-2/igt@api_intel_bb@blit-reloc-keep-cache.html

  * igt@api_intel_bb@object-reloc-keep-cache:
    - shard-dg1:          NOTRUN -> [SKIP][3] ([i915#8411])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg1-18/igt@api_intel_bb@object-reloc-keep-cache.html

  * igt@drm_buddy@drm_buddy:
    - shard-tglu-1:       NOTRUN -> [SKIP][4] ([i915#15678])
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@drm_buddy@drm_buddy.html

  * igt@gem_bad_reloc@negative-reloc-lut:
    - shard-rkl:          NOTRUN -> [SKIP][5] ([i915#3281]) +7 other tests skip
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-2/igt@gem_bad_reloc@negative-reloc-lut.html

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

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

  * igt@gem_ccs@suspend-resume@tile4-compressed-compfmt0-smem-lmem0:
    - shard-dg2:          NOTRUN -> [INCOMPLETE][8] ([i915#13356] / [i915#16348])
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg2-3/igt@gem_ccs@suspend-resume@tile4-compressed-compfmt0-smem-lmem0.html

  * igt@gem_create@create-ext-cpu-access-sanity-check:
    - shard-rkl:          NOTRUN -> [SKIP][9] ([i915#6335])
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-7/igt@gem_create@create-ext-cpu-access-sanity-check.html

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

  * igt@gem_ctx_sseu@invalid-args:
    - shard-tglu-1:       NOTRUN -> [SKIP][11] ([i915#280])
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@gem_ctx_sseu@invalid-args.html

  * igt@gem_exec_balancer@bonded-true-hang:
    - shard-dg1:          NOTRUN -> [SKIP][12] ([i915#4812])
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg1-18/igt@gem_exec_balancer@bonded-true-hang.html

  * igt@gem_exec_balancer@parallel-ordering:
    - shard-rkl:          NOTRUN -> [SKIP][13] ([i915#4525])
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-5/igt@gem_exec_balancer@parallel-ordering.html

  * igt@gem_exec_capture@capture-invisible:
    - shard-glk10:        NOTRUN -> [SKIP][14] ([i915#6334]) +1 other test skip
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-glk10/igt@gem_exec_capture@capture-invisible.html

  * igt@gem_exec_reloc@basic-cpu-read:
    - shard-dg1:          NOTRUN -> [SKIP][15] ([i915#3281]) +1 other test skip
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg1-18/igt@gem_exec_reloc@basic-cpu-read.html

  * igt@gem_exec_suspend@basic-s0:
    - shard-dg2:          [PASS][16] -> [INCOMPLETE][17] ([i915#13356]) +1 other test incomplete
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-dg2-4/igt@gem_exec_suspend@basic-s0.html
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg2-6/igt@gem_exec_suspend@basic-s0.html

  * igt@gem_huc_copy@huc-copy:
    - shard-tglu-1:       NOTRUN -> [SKIP][18] ([i915#2190])
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@gem_huc_copy@huc-copy.html

  * igt@gem_lmem_swapping@basic:
    - shard-tglu-1:       NOTRUN -> [SKIP][19] ([i915#4613])
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@gem_lmem_swapping@basic.html

  * igt@gem_lmem_swapping@heavy-random:
    - shard-tglu:         NOTRUN -> [SKIP][20] ([i915#4613]) +1 other test skip
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-8/igt@gem_lmem_swapping@heavy-random.html

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

  * igt@gem_lmem_swapping@smem-oom:
    - shard-glk:          NOTRUN -> [SKIP][22] ([i915#4613])
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-glk1/igt@gem_lmem_swapping@smem-oom.html

  * igt@gem_pread@exhaustion:
    - shard-rkl:          NOTRUN -> [SKIP][23] ([i915#3282]) +2 other tests skip
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-7/igt@gem_pread@exhaustion.html

  * igt@gem_pwrite@basic-exhaustion:
    - shard-glk10:        NOTRUN -> [WARN][24] ([i915#14702] / [i915#2658])
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-glk10/igt@gem_pwrite@basic-exhaustion.html

  * igt@gem_pxp@hw-rejects-pxp-context:
    - shard-rkl:          NOTRUN -> [SKIP][25] ([i915#13717])
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-5/igt@gem_pxp@hw-rejects-pxp-context.html

  * igt@gem_set_tiling_vs_blt@tiled-to-untiled:
    - shard-dg1:          NOTRUN -> [SKIP][26] ([i915#4079])
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg1-18/igt@gem_set_tiling_vs_blt@tiled-to-untiled.html

  * igt@gem_userptr_blits@create-destroy-unsync:
    - shard-tglu-1:       NOTRUN -> [SKIP][27] ([i915#3297])
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@gem_userptr_blits@create-destroy-unsync.html

  * igt@gem_workarounds@suspend-resume-fd:
    - shard-rkl:          [PASS][28] -> [INCOMPLETE][29] ([i915#13356])
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-4/igt@gem_workarounds@suspend-resume-fd.html
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-3/igt@gem_workarounds@suspend-resume-fd.html

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

  * igt@gen9_exec_parse@secure-batches:
    - shard-rkl:          NOTRUN -> [SKIP][31] ([i915#2527])
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-7/igt@gen9_exec_parse@secure-batches.html

  * igt@gen9_exec_parse@valid-registers:
    - shard-tglu-1:       NOTRUN -> [SKIP][32] ([i915#2527] / [i915#2856]) +2 other tests skip
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@gen9_exec_parse@valid-registers.html

  * igt@i915_module_load@resize-bar:
    - shard-tglu:         NOTRUN -> [SKIP][33] ([i915#6412])
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-3/igt@i915_module_load@resize-bar.html

  * igt@i915_pm_freq_api@freq-suspend:
    - shard-tglu-1:       NOTRUN -> [SKIP][34] ([i915#8399])
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@i915_pm_freq_api@freq-suspend.html

  * igt@i915_pm_rc6_residency@rc6-fence:
    - shard-tglu:         NOTRUN -> [WARN][35] ([i915#13790] / [i915#2681]) +1 other test warn
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-8/igt@i915_pm_rc6_residency@rc6-fence.html

  * igt@i915_pm_rc6_residency@rc6-idle:
    - shard-tglu-1:       NOTRUN -> [SKIP][36] ([i915#14498])
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@i915_pm_rc6_residency@rc6-idle.html

  * igt@i915_pm_rpm@system-suspend-execbuf:
    - shard-dg2:          [PASS][37] -> [DMESG-WARN][38] ([i915#13562])
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-dg2-4/igt@i915_pm_rpm@system-suspend-execbuf.html
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg2-4/igt@i915_pm_rpm@system-suspend-execbuf.html

  * igt@i915_pm_sseu@full-enable:
    - shard-tglu:         NOTRUN -> [SKIP][39] ([i915#4387])
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-8/igt@i915_pm_sseu@full-enable.html

  * igt@i915_query@hwconfig_table:
    - shard-rkl:          NOTRUN -> [SKIP][40] ([i915#6245])
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-5/igt@i915_query@hwconfig_table.html

  * igt@i915_suspend@fence-restore-untiled:
    - shard-glk11:        NOTRUN -> [INCOMPLETE][41] ([i915#16182] / [i915#4817])
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-glk11/igt@i915_suspend@fence-restore-untiled.html

  * igt@i915_suspend@forcewake:
    - shard-glk:          NOTRUN -> [INCOMPLETE][42] ([i915#16182] / [i915#4817])
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-glk1/igt@i915_suspend@forcewake.html

  * igt@kms_addfb_basic@invalid-smem-bo-on-discrete:
    - shard-tglu:         NOTRUN -> [SKIP][43] ([i915#12454] / [i915#12712])
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-3/igt@kms_addfb_basic@invalid-smem-bo-on-discrete.html

  * igt@kms_async_flips@alternate-sync-async-flip-atomic:
    - shard-dg1:          [PASS][44] -> [FAIL][45] ([i915#14888])
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-dg1-16/igt@kms_async_flips@alternate-sync-async-flip-atomic.html
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg1-15/igt@kms_async_flips@alternate-sync-async-flip-atomic.html

  * igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-a-hdmi-a-1:
    - shard-dg1:          NOTRUN -> [FAIL][46] ([i915#14888])
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg1-15/igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-a-hdmi-a-1.html

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

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

  * igt@kms_big_fb@4-tiled-addfb:
    - shard-tglu-1:       NOTRUN -> [SKIP][49] ([i915#5286]) +2 other tests skip
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@kms_big_fb@4-tiled-addfb.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-0-hflip:
    - shard-rkl:          NOTRUN -> [SKIP][50] ([i915#5286]) +3 other tests skip
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-5/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-0-hflip.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-0-hflip-async-flip:
    - shard-dg1:          NOTRUN -> [SKIP][51] ([i915#4538] / [i915#5286])
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg1-18/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-0-hflip-async-flip.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-hflip:
    - shard-tglu:         NOTRUN -> [SKIP][52] ([i915#5286]) +3 other tests skip
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-8/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-hflip.html

  * igt@kms_big_fb@linear-64bpp-rotate-90:
    - shard-rkl:          NOTRUN -> [SKIP][53] ([i915#3638]) +1 other test skip
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-7/igt@kms_big_fb@linear-64bpp-rotate-90.html

  * igt@kms_big_fb@yf-tiled-32bpp-rotate-90:
    - shard-dg1:          NOTRUN -> [SKIP][54] ([i915#4538])
   [54]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg1-18/igt@kms_big_fb@yf-tiled-32bpp-rotate-90.html

  * igt@kms_ccs@bad-rotation-90-4-tiled-dg2-rc-ccs@pipe-c-hdmi-a-1:
    - shard-rkl:          NOTRUN -> [SKIP][55] ([i915#14098] / [i915#6095]) +39 other tests skip
   [55]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-5/igt@kms_ccs@bad-rotation-90-4-tiled-dg2-rc-ccs@pipe-c-hdmi-a-1.html

  * igt@kms_ccs@bad-rotation-90-4-tiled-mtl-rc-ccs-cc@pipe-b-hdmi-a-4:
    - shard-dg1:          NOTRUN -> [SKIP][56] ([i915#6095]) +212 other tests skip
   [56]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg1-17/igt@kms_ccs@bad-rotation-90-4-tiled-mtl-rc-ccs-cc@pipe-b-hdmi-a-4.html

  * igt@kms_ccs@bad-rotation-90-y-tiled-gen12-mc-ccs:
    - shard-tglu:         NOTRUN -> [SKIP][57] ([i915#6095]) +29 other tests skip
   [57]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-3/igt@kms_ccs@bad-rotation-90-y-tiled-gen12-mc-ccs.html

  * igt@kms_ccs@ccs-on-another-bo-4-tiled-mtl-rc-ccs-cc:
    - shard-glk:          NOTRUN -> [SKIP][58] +171 other tests skip
   [58]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-glk2/igt@kms_ccs@ccs-on-another-bo-4-tiled-mtl-rc-ccs-cc.html

  * igt@kms_ccs@crc-primary-basic-4-tiled-lnl-ccs:
    - shard-tglu:         NOTRUN -> [SKIP][59] ([i915#12313])
   [59]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-3/igt@kms_ccs@crc-primary-basic-4-tiled-lnl-ccs.html

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

  * igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-mc-ccs@pipe-a-hdmi-a-3:
    - shard-dg2:          NOTRUN -> [SKIP][61] ([i915#10307] / [i915#6095]) +97 other tests skip
   [61]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg2-7/igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-mc-ccs@pipe-a-hdmi-a-3.html

  * igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-rc-ccs-cc@pipe-c-hdmi-a-1:
    - shard-glk10:        NOTRUN -> [SKIP][62] +126 other tests skip
   [62]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-glk10/igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-rc-ccs-cc@pipe-c-hdmi-a-1.html

  * igt@kms_ccs@crc-primary-suspend-4-tiled-lnl-ccs:
    - shard-tglu-1:       NOTRUN -> [SKIP][63] ([i915#12805])
   [63]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@kms_ccs@crc-primary-suspend-4-tiled-lnl-ccs.html

  * igt@kms_ccs@crc-primary-suspend-y-tiled-ccs@pipe-a-hdmi-a-1:
    - shard-glk:          [PASS][64] -> [INCOMPLETE][65] ([i915#15582])
   [64]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-glk2/igt@kms_ccs@crc-primary-suspend-y-tiled-ccs@pipe-a-hdmi-a-1.html
   [65]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-glk8/igt@kms_ccs@crc-primary-suspend-y-tiled-ccs@pipe-a-hdmi-a-1.html

  * igt@kms_ccs@crc-primary-suspend-y-tiled-ccs@pipe-d-hdmi-a-3:
    - shard-dg2:          NOTRUN -> [SKIP][66] ([i915#6095]) +7 other tests skip
   [66]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg2-3/igt@kms_ccs@crc-primary-suspend-y-tiled-ccs@pipe-d-hdmi-a-3.html

  * igt@kms_ccs@crc-primary-suspend-yf-tiled-ccs@pipe-a-hdmi-a-1:
    - shard-glk:          NOTRUN -> [INCOMPLETE][67] ([i915#15582]) +1 other test incomplete
   [67]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-glk6/igt@kms_ccs@crc-primary-suspend-yf-tiled-ccs@pipe-a-hdmi-a-1.html

  * igt@kms_ccs@missing-ccs-buffer-y-tiled-gen12-mc-ccs@pipe-b-hdmi-a-1:
    - shard-tglu-1:       NOTRUN -> [SKIP][68] ([i915#6095]) +39 other tests skip
   [68]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@kms_ccs@missing-ccs-buffer-y-tiled-gen12-mc-ccs@pipe-b-hdmi-a-1.html

  * igt@kms_ccs@random-ccs-data-4-tiled-lnl-ccs:
    - shard-tglu-1:       NOTRUN -> [SKIP][69] ([i915#12313]) +1 other test skip
   [69]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@kms_ccs@random-ccs-data-4-tiled-lnl-ccs.html

  * igt@kms_ccs@random-ccs-data-yf-tiled-ccs@pipe-d-hdmi-a-1:
    - shard-dg2:          NOTRUN -> [SKIP][70] ([i915#10307] / [i915#10434] / [i915#6095]) +1 other test skip
   [70]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/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-rkl:          NOTRUN -> [SKIP][71] ([i915#3742])
   [71]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-7/igt@kms_cdclk@mode-transition-all-outputs.html

  * igt@kms_cdclk@mode-transition@pipe-d-hdmi-a-3:
    - shard-dg2:          NOTRUN -> [SKIP][72] ([i915#13781]) +3 other tests skip
   [72]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg2-5/igt@kms_cdclk@mode-transition@pipe-d-hdmi-a-3.html

  * igt@kms_chamelium_audio@dp-audio-after-suspend:
    - shard-rkl:          NOTRUN -> [SKIP][73] ([i915#11151])
   [73]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-2/igt@kms_chamelium_audio@dp-audio-after-suspend.html

  * igt@kms_chamelium_audio@hdmi-audio-edid:
    - shard-tglu:         NOTRUN -> [SKIP][74] ([i915#11151] / [i915#7828]) +3 other tests skip
   [74]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-3/igt@kms_chamelium_audio@hdmi-audio-edid.html

  * igt@kms_chamelium_color_pipeline@plane-lut1d-ctm3x4-lut1d:
    - shard-tglu:         NOTRUN -> [SKIP][75] ([i915#16471])
   [75]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-3/igt@kms_chamelium_color_pipeline@plane-lut1d-ctm3x4-lut1d.html

  * igt@kms_chamelium_color_pipeline@plane-lut1d-lut1d:
    - shard-rkl:          NOTRUN -> [SKIP][76] ([i915#16471])
   [76]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-7/igt@kms_chamelium_color_pipeline@plane-lut1d-lut1d.html

  * igt@kms_chamelium_color_pipeline@plane-lut1d-post-ctm3x4:
    - shard-tglu-1:       NOTRUN -> [SKIP][77] ([i915#16471])
   [77]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@kms_chamelium_color_pipeline@plane-lut1d-post-ctm3x4.html

  * igt@kms_chamelium_frames@dp-crc-fast:
    - shard-dg1:          NOTRUN -> [SKIP][78] ([i915#11151] / [i915#7828]) +1 other test skip
   [78]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg1-18/igt@kms_chamelium_frames@dp-crc-fast.html

  * igt@kms_chamelium_frames@hdmi-frame-dump:
    - shard-tglu-1:       NOTRUN -> [SKIP][79] ([i915#11151] / [i915#7828]) +6 other tests skip
   [79]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@kms_chamelium_frames@hdmi-frame-dump.html

  * igt@kms_chamelium_hpd@vga-hpd-for-each-pipe:
    - shard-rkl:          NOTRUN -> [SKIP][80] ([i915#11151] / [i915#7828]) +5 other tests skip
   [80]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-2/igt@kms_chamelium_hpd@vga-hpd-for-each-pipe.html

  * igt@kms_content_protection@atomic-dpms:
    - shard-tglu-1:       NOTRUN -> [SKIP][81] ([i915#15865])
   [81]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@kms_content_protection@atomic-dpms.html

  * igt@kms_content_protection@dp-mst-lic-type-0:
    - shard-tglu:         NOTRUN -> [SKIP][82] ([i915#15330] / [i915#3116] / [i915#3299])
   [82]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-3/igt@kms_content_protection@dp-mst-lic-type-0.html

  * igt@kms_content_protection@dp-mst-lic-type-0-hdcp14:
    - shard-tglu-1:       NOTRUN -> [SKIP][83] ([i915#15330])
   [83]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@kms_content_protection@dp-mst-lic-type-0-hdcp14.html

  * igt@kms_content_protection@dp-mst-type-0-suspend-resume:
    - shard-rkl:          NOTRUN -> [SKIP][84] ([i915#15330])
   [84]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-5/igt@kms_content_protection@dp-mst-type-0-suspend-resume.html

  * igt@kms_content_protection@legacy-hdcp14:
    - shard-tglu:         NOTRUN -> [SKIP][85] ([i915#15865]) +1 other test skip
   [85]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-8/igt@kms_content_protection@legacy-hdcp14.html

  * igt@kms_content_protection@legacy@pipe-a-dp-3:
    - shard-dg2:          NOTRUN -> [FAIL][86] ([i915#7173])
   [86]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg2-10/igt@kms_content_protection@legacy@pipe-a-dp-3.html

  * igt@kms_content_protection@lic-type-0-hdcp14:
    - shard-dg1:          NOTRUN -> [SKIP][87] ([i915#15865])
   [87]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg1-18/igt@kms_content_protection@lic-type-0-hdcp14.html

  * igt@kms_content_protection@srm:
    - shard-rkl:          NOTRUN -> [SKIP][88] ([i915#15865]) +2 other tests skip
   [88]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-5/igt@kms_content_protection@srm.html

  * igt@kms_cursor_crc@cursor-offscreen-512x512:
    - shard-tglu-1:       NOTRUN -> [SKIP][89] ([i915#13049])
   [89]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@kms_cursor_crc@cursor-offscreen-512x512.html

  * igt@kms_cursor_crc@cursor-onscreen-256x85:
    - shard-tglu-1:       NOTRUN -> [FAIL][90] ([i915#13566]) +3 other tests fail
   [90]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@kms_cursor_crc@cursor-onscreen-256x85.html

  * igt@kms_cursor_crc@cursor-onscreen-512x170:
    - shard-tglu:         NOTRUN -> [SKIP][91] ([i915#13049])
   [91]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-3/igt@kms_cursor_crc@cursor-onscreen-512x170.html

  * igt@kms_cursor_crc@cursor-random-512x170:
    - shard-rkl:          NOTRUN -> [SKIP][92] ([i915#13049])
   [92]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-5/igt@kms_cursor_crc@cursor-random-512x170.html

  * igt@kms_cursor_crc@cursor-sliding-128x42@pipe-a-hdmi-a-1:
    - shard-rkl:          NOTRUN -> [FAIL][93] ([i915#13566])
   [93]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-5/igt@kms_cursor_crc@cursor-sliding-128x42@pipe-a-hdmi-a-1.html

  * igt@kms_cursor_crc@cursor-sliding-max-size:
    - shard-tglu-1:       NOTRUN -> [SKIP][94] ([i915#3555]) +3 other tests skip
   [94]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@kms_cursor_crc@cursor-sliding-max-size.html

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

  * igt@kms_cursor_legacy@cursorb-vs-flipa-legacy:
    - shard-rkl:          NOTRUN -> [SKIP][96] +50 other tests skip
   [96]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-5/igt@kms_cursor_legacy@cursorb-vs-flipa-legacy.html

  * igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions:
    - shard-dg1:          NOTRUN -> [SKIP][97] ([i915#4103])
   [97]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg1-18/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions.html

  * igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions-varying-size:
    - shard-tglu-1:       NOTRUN -> [SKIP][98] ([i915#4103])
   [98]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions-varying-size.html

  * igt@kms_dirtyfb@psr-dirtyfb-ioctl:
    - shard-tglu-1:       NOTRUN -> [SKIP][99] ([i915#9723])
   [99]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@kms_dirtyfb@psr-dirtyfb-ioctl.html

  * igt@kms_dither@fb-8bpc-vs-panel-6bpc:
    - shard-dg2:          [PASS][100] -> [SKIP][101] ([i915#3555])
   [100]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-dg2-10/igt@kms_dither@fb-8bpc-vs-panel-6bpc.html
   [101]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg2-5/igt@kms_dither@fb-8bpc-vs-panel-6bpc.html

  * igt@kms_dp_link_training@non-uhbr-sst:
    - shard-tglu-1:       NOTRUN -> [SKIP][102] ([i915#13749])
   [102]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@kms_dp_link_training@non-uhbr-sst.html

  * igt@kms_dp_link_training@uhbr-mst:
    - shard-rkl:          NOTRUN -> [SKIP][103] ([i915#13748])
   [103]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-2/igt@kms_dp_link_training@uhbr-mst.html

  * igt@kms_dp_linktrain_fallback@dp-fallback:
    - shard-dg1:          NOTRUN -> [SKIP][104] ([i915#13707])
   [104]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg1-18/igt@kms_dp_linktrain_fallback@dp-fallback.html

  * igt@kms_dsc@dsc-basic:
    - shard-rkl:          NOTRUN -> [SKIP][105] ([i915#16361]) +1 other test skip
   [105]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-5/igt@kms_dsc@dsc-basic.html

  * igt@kms_dsc@dsc-with-formats:
    - shard-tglu:         NOTRUN -> [SKIP][106] ([i915#16361]) +3 other tests skip
   [106]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-8/igt@kms_dsc@dsc-with-formats.html

  * igt@kms_dsc@dsc-with-output-formats:
    - shard-tglu-1:       NOTRUN -> [SKIP][107] ([i915#16361]) +2 other tests skip
   [107]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@kms_dsc@dsc-with-output-formats.html

  * igt@kms_dsc@dsc-with-output-formats-bigjoiner:
    - shard-dg1:          NOTRUN -> [SKIP][108] ([i915#16361])
   [108]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg1-18/igt@kms_dsc@dsc-with-output-formats-bigjoiner.html

  * igt@kms_fbcon_fbt@psr-suspend:
    - shard-rkl:          NOTRUN -> [SKIP][109] ([i915#3955])
   [109]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-5/igt@kms_fbcon_fbt@psr-suspend.html

  * igt@kms_feature_discovery@chamelium:
    - shard-tglu-1:       NOTRUN -> [SKIP][110] ([i915#2065])
   [110]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@kms_feature_discovery@chamelium.html

  * igt@kms_feature_discovery@display-3x:
    - shard-rkl:          NOTRUN -> [SKIP][111] ([i915#16081])
   [111]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-2/igt@kms_feature_discovery@display-3x.html

  * igt@kms_feature_discovery@display-4x:
    - shard-glk11:        NOTRUN -> [SKIP][112] +27 other tests skip
   [112]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-glk11/igt@kms_feature_discovery@display-4x.html

  * igt@kms_feature_discovery@hdr:
    - shard-tglu-1:       NOTRUN -> [SKIP][113] ([i915#16600])
   [113]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@kms_feature_discovery@hdr.html

  * igt@kms_flip@2x-blocking-wf_vblank:
    - shard-tglu:         NOTRUN -> [SKIP][114] ([i915#3637] / [i915#9934]) +4 other tests skip
   [114]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-3/igt@kms_flip@2x-blocking-wf_vblank.html

  * igt@kms_flip@2x-flip-vs-dpms:
    - shard-rkl:          NOTRUN -> [SKIP][115] ([i915#9934]) +6 other tests skip
   [115]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-2/igt@kms_flip@2x-flip-vs-dpms.html

  * igt@kms_flip@2x-flip-vs-panning-vs-hang:
    - shard-dg1:          NOTRUN -> [SKIP][116] ([i915#9934]) +1 other test skip
   [116]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg1-18/igt@kms_flip@2x-flip-vs-panning-vs-hang.html

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

  * igt@kms_flip@wf_vblank-ts-check-interruptible:
    - shard-rkl:          [PASS][118] -> [FAIL][119] ([i915#14600])
   [118]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-5/igt@kms_flip@wf_vblank-ts-check-interruptible.html
   [119]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-7/igt@kms_flip@wf_vblank-ts-check-interruptible.html

  * igt@kms_flip@wf_vblank-ts-check-interruptible@b-hdmi-a2:
    - shard-rkl:          NOTRUN -> [FAIL][120] ([i915#14600])
   [120]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-7/igt@kms_flip@wf_vblank-ts-check-interruptible@b-hdmi-a2.html

  * igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-16bpp-4tile-upscaling:
    - shard-tglu:         NOTRUN -> [SKIP][121] ([i915#15643])
   [121]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-3/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-16bpp-4tile-upscaling.html

  * igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-upscaling:
    - shard-tglu-1:       NOTRUN -> [SKIP][122] ([i915#15643]) +1 other test skip
   [122]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-upscaling.html

  * igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-downscaling:
    - shard-dg1:          NOTRUN -> [SKIP][123] ([i915#15643]) +2 other tests skip
   [123]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg1-18/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-downscaling.html

  * igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-upscaling:
    - shard-rkl:          NOTRUN -> [SKIP][124] ([i915#15643]) +1 other test skip
   [124]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-7/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-upscaling.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-mmap-cpu:
    - shard-tglu-1:       NOTRUN -> [SKIP][125] +75 other tests skip
   [125]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-mmap-cpu.html

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

  * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-shrfb-draw-mmap-gtt:
    - shard-rkl:          NOTRUN -> [SKIP][127] ([i915#1825]) +8 other tests skip
   [127]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-5/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-shrfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbc-suspend:
    - shard-rkl:          [PASS][128] -> [INCOMPLETE][129] ([i915#10056])
   [128]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-7/igt@kms_frontbuffer_tracking@fbc-suspend.html
   [129]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-6/igt@kms_frontbuffer_tracking@fbc-suspend.html
    - shard-glk11:        NOTRUN -> [INCOMPLETE][130] ([i915#10056] / [i915#16593])
   [130]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-glk11/igt@kms_frontbuffer_tracking@fbc-suspend.html

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

  * igt@kms_frontbuffer_tracking@fbchdr-1p-indfb-fliptrack-mmap-gtt:
    - shard-tglu-1:       NOTRUN -> [SKIP][132] ([i915#15989]) +15 other tests skip
   [132]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@kms_frontbuffer_tracking@fbchdr-1p-indfb-fliptrack-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbchdr-1p-pri-indfb-multidraw:
    - shard-dg2:          [PASS][133] -> [SKIP][134] ([i915#15989]) +6 other tests skip
   [133]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-dg2-10/igt@kms_frontbuffer_tracking@fbchdr-1p-pri-indfb-multidraw.html
   [134]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg2-5/igt@kms_frontbuffer_tracking@fbchdr-1p-pri-indfb-multidraw.html

  * igt@kms_frontbuffer_tracking@fbchdr-2p-scndscrn-pri-indfb-draw-pwrite:
    - shard-glk:          [PASS][135] -> [SKIP][136] +10 other tests skip
   [135]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-glk8/igt@kms_frontbuffer_tracking@fbchdr-2p-scndscrn-pri-indfb-draw-pwrite.html
   [136]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-glk9/igt@kms_frontbuffer_tracking@fbchdr-2p-scndscrn-pri-indfb-draw-pwrite.html

  * igt@kms_frontbuffer_tracking@fbchdr-modesetfrombusy:
    - shard-rkl:          NOTRUN -> [SKIP][137] ([i915#15989]) +11 other tests skip
   [137]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-7/igt@kms_frontbuffer_tracking@fbchdr-modesetfrombusy.html

  * igt@kms_frontbuffer_tracking@fbchdr-rgb101010-draw-render:
    - shard-rkl:          [PASS][138] -> [SKIP][139] ([i915#15989]) +9 other tests skip
   [138]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-6/igt@kms_frontbuffer_tracking@fbchdr-rgb101010-draw-render.html
   [139]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-5/igt@kms_frontbuffer_tracking@fbchdr-rgb101010-draw-render.html

  * igt@kms_frontbuffer_tracking@fbchdr-rgb565-draw-pwrite:
    - shard-dg1:          NOTRUN -> [SKIP][140] ([i915#15989]) +3 other tests skip
   [140]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg1-18/igt@kms_frontbuffer_tracking@fbchdr-rgb565-draw-pwrite.html

  * igt@kms_frontbuffer_tracking@fbchdr-suspend:
    - shard-glk10:        NOTRUN -> [INCOMPLETE][141] ([i915#16056] / [i915#16593])
   [141]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-glk10/igt@kms_frontbuffer_tracking@fbchdr-suspend.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-rte:
    - shard-rkl:          NOTRUN -> [SKIP][142] ([i915#15102] / [i915#3023]) +13 other tests skip
   [142]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-2/igt@kms_frontbuffer_tracking@fbcpsr-1p-rte.html

  * igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-blt:
    - shard-tglu-1:       NOTRUN -> [SKIP][143] ([i915#15102]) +30 other tests skip
   [143]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-tiling-4:
    - shard-tglu-1:       NOTRUN -> [SKIP][144] ([i915#5439])
   [144]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@kms_frontbuffer_tracking@fbcpsr-tiling-4.html

  * igt@kms_frontbuffer_tracking@fbcpsrhdr-1p-primscrn-spr-indfb-draw-mmap-cpu:
    - shard-rkl:          NOTRUN -> [SKIP][145] ([i915#15102]) +14 other tests skip
   [145]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-2/igt@kms_frontbuffer_tracking@fbcpsrhdr-1p-primscrn-spr-indfb-draw-mmap-cpu.html

  * igt@kms_frontbuffer_tracking@hdr-1p-primscrn-pri-shrfb-draw-mmap-cpu:
    - shard-tglu:         NOTRUN -> [SKIP][146] ([i915#15989]) +10 other tests skip
   [146]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-3/igt@kms_frontbuffer_tracking@hdr-1p-primscrn-pri-shrfb-draw-mmap-cpu.html

  * igt@kms_frontbuffer_tracking@pipe-fbc-rte:
    - shard-tglu-1:       NOTRUN -> [SKIP][147] ([i915#9766])
   [147]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@kms_frontbuffer_tracking@pipe-fbc-rte.html

  * igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-draw-mmap-wc:
    - shard-dg1:          NOTRUN -> [SKIP][148] ([i915#15990] / [i915#8708]) +6 other tests skip
   [148]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg1-18/igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@psr-shrfb-scaledprimary:
    - shard-tglu:         NOTRUN -> [SKIP][149] ([i915#15102]) +21 other tests skip
   [149]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-8/igt@kms_frontbuffer_tracking@psr-shrfb-scaledprimary.html

  * igt@kms_frontbuffer_tracking@psr-suspend:
    - shard-dg1:          NOTRUN -> [SKIP][150] ([i915#15102]) +4 other tests skip
   [150]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg1-18/igt@kms_frontbuffer_tracking@psr-suspend.html

  * igt@kms_frontbuffer_tracking@psrhdr-2p-scndscrn-cur-indfb-draw-mmap-cpu:
    - shard-dg1:          NOTRUN -> [SKIP][151] +15 other tests skip
   [151]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg1-18/igt@kms_frontbuffer_tracking@psrhdr-2p-scndscrn-cur-indfb-draw-mmap-cpu.html

  * igt@kms_hdr@bpc-switch:
    - shard-rkl:          [PASS][152] -> [SKIP][153] ([i915#3555] / [i915#8228])
   [152]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-6/igt@kms_hdr@bpc-switch.html
   [153]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-5/igt@kms_hdr@bpc-switch.html

  * igt@kms_hdr@bpc-switch-dpms:
    - shard-rkl:          NOTRUN -> [SKIP][154] ([i915#3555] / [i915#8228])
   [154]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-2/igt@kms_hdr@bpc-switch-dpms.html

  * igt@kms_hdr@bpc-switch-suspend:
    - shard-tglu-1:       NOTRUN -> [SKIP][155] ([i915#3555] / [i915#8228])
   [155]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@kms_hdr@bpc-switch-suspend.html

  * igt@kms_hdr@brightness-with-hdr:
    - shard-tglu-1:       NOTRUN -> [SKIP][156] ([i915#12713])
   [156]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@kms_hdr@brightness-with-hdr.html

  * igt@kms_hdr@invalid-hdr:
    - shard-tglu:         NOTRUN -> [SKIP][157] ([i915#3555] / [i915#8228])
   [157]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-8/igt@kms_hdr@invalid-hdr.html

  * igt@kms_joiner@basic-big-joiner:
    - shard-rkl:          NOTRUN -> [SKIP][158] ([i915#15460])
   [158]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-2/igt@kms_joiner@basic-big-joiner.html

  * igt@kms_joiner@basic-force-big-joiner:
    - shard-tglu-1:       NOTRUN -> [SKIP][159] ([i915#15459])
   [159]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@kms_joiner@basic-force-big-joiner.html

  * igt@kms_joiner@basic-force-ultra-joiner:
    - shard-tglu-1:       NOTRUN -> [SKIP][160] ([i915#15458])
   [160]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@kms_joiner@basic-force-ultra-joiner.html

  * igt@kms_joiner@invalid-modeset-big-joiner:
    - shard-tglu-1:       NOTRUN -> [SKIP][161] ([i915#15460])
   [161]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@kms_joiner@invalid-modeset-big-joiner.html

  * igt@kms_joiner@invalid-modeset-force-ultra-joiner:
    - shard-tglu:         NOTRUN -> [SKIP][162] ([i915#15458])
   [162]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-3/igt@kms_joiner@invalid-modeset-force-ultra-joiner.html

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

  * igt@kms_panel_fitting@atomic-fastset:
    - shard-tglu:         NOTRUN -> [SKIP][164] ([i915#6301])
   [164]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-3/igt@kms_panel_fitting@atomic-fastset.html

  * igt@kms_pipe_crc_basic@suspend-read-crc:
    - shard-rkl:          NOTRUN -> [INCOMPLETE][165] ([i915#12756] / [i915#13476])
   [165]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-6/igt@kms_pipe_crc_basic@suspend-read-crc.html

  * igt@kms_pipe_crc_basic@suspend-read-crc@pipe-a-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [INCOMPLETE][166] ([i915#13476])
   [166]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-6/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-a-hdmi-a-2.html

  * igt@kms_pipe_stress@stress-xrgb8888-yftiled:
    - shard-tglu-1:       NOTRUN -> [SKIP][167] ([i915#14712])
   [167]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@kms_pipe_stress@stress-xrgb8888-yftiled.html

  * igt@kms_plane@pixel-format-4-tiled-dg2-mc-ccs-modifier:
    - shard-rkl:          NOTRUN -> [SKIP][168] ([i915#15709]) +3 other tests skip
   [168]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-2/igt@kms_plane@pixel-format-4-tiled-dg2-mc-ccs-modifier.html

  * igt@kms_plane@pixel-format-4-tiled-mtl-mc-ccs-modifier:
    - shard-tglu:         NOTRUN -> [SKIP][169] ([i915#15709]) +1 other test skip
   [169]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-8/igt@kms_plane@pixel-format-4-tiled-mtl-mc-ccs-modifier.html

  * igt@kms_plane@pixel-format-y-tiled-ccs-modifier-source-clamping:
    - shard-dg1:          NOTRUN -> [SKIP][170] ([i915#15709])
   [170]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg1-18/igt@kms_plane@pixel-format-y-tiled-ccs-modifier-source-clamping.html

  * igt@kms_plane@pixel-format-y-tiled-gen12-rc-ccs-cc-modifier@pipe-b-plane-7:
    - shard-tglu-1:       NOTRUN -> [SKIP][171] ([i915#16386]) +1 other test skip
   [171]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@kms_plane@pixel-format-y-tiled-gen12-rc-ccs-cc-modifier@pipe-b-plane-7.html

  * igt@kms_plane@pixel-format-yf-tiled-modifier-source-clamping:
    - shard-tglu-1:       NOTRUN -> [SKIP][172] ([i915#15709]) +1 other test skip
   [172]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@kms_plane@pixel-format-yf-tiled-modifier-source-clamping.html

  * igt@kms_plane_multiple@2x-tiling-x:
    - shard-tglu-1:       NOTRUN -> [SKIP][173] ([i915#13958])
   [173]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@kms_plane_multiple@2x-tiling-x.html

  * igt@kms_plane_multiple@tiling-4:
    - shard-rkl:          NOTRUN -> [SKIP][174] ([i915#14259])
   [174]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-5/igt@kms_plane_multiple@tiling-4.html

  * igt@kms_plane_scaling@plane-downscale-factor-0-5-with-rotation@pipe-c:
    - shard-tglu:         NOTRUN -> [SKIP][175] ([i915#15329]) +4 other tests skip
   [175]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-3/igt@kms_plane_scaling@plane-downscale-factor-0-5-with-rotation@pipe-c.html

  * igt@kms_plane_scaling@plane-scaler-unity-scaling-with-rotation@pipe-b:
    - shard-tglu-1:       NOTRUN -> [SKIP][176] ([i915#15329]) +4 other tests skip
   [176]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@kms_plane_scaling@plane-scaler-unity-scaling-with-rotation@pipe-b.html

  * igt@kms_pm_backlight@bad-brightness:
    - shard-tglu-1:       NOTRUN -> [SKIP][177] ([i915#12343] / [i915#9812])
   [177]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@kms_pm_backlight@bad-brightness.html

  * igt@kms_pm_backlight@basic-brightness:
    - shard-tglu:         NOTRUN -> [SKIP][178] ([i915#12343] / [i915#9812])
   [178]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-3/igt@kms_pm_backlight@basic-brightness.html

  * igt@kms_pm_backlight@brightness-with-dpms:
    - shard-rkl:          NOTRUN -> [SKIP][179] ([i915#12343])
   [179]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-7/igt@kms_pm_backlight@brightness-with-dpms.html

  * igt@kms_pm_dc@dc6-psr:
    - shard-tglu-1:       NOTRUN -> [SKIP][180] ([i915#15948])
   [180]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@kms_pm_dc@dc6-psr.html

  * igt@kms_pm_dc@dc9-dpms:
    - shard-tglu-1:       NOTRUN -> [SKIP][181] ([i915#15739])
   [181]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@kms_pm_dc@dc9-dpms.html

  * igt@kms_pm_rpm@dpms-mode-unset-non-lpsp:
    - shard-dg1:          [PASS][182] -> [SKIP][183] ([i915#15073])
   [182]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-dg1-16/igt@kms_pm_rpm@dpms-mode-unset-non-lpsp.html
   [183]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg1-15/igt@kms_pm_rpm@dpms-mode-unset-non-lpsp.html

  * igt@kms_pm_rpm@modeset-lpsp-stress-no-wait:
    - shard-dg1:          NOTRUN -> [SKIP][184] ([i915#15073])
   [184]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg1-18/igt@kms_pm_rpm@modeset-lpsp-stress-no-wait.html

  * igt@kms_pm_rpm@modeset-non-lpsp-stress:
    - shard-rkl:          [PASS][185] -> [SKIP][186] ([i915#15073]) +1 other test skip
   [185]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-3/igt@kms_pm_rpm@modeset-non-lpsp-stress.html
   [186]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-2/igt@kms_pm_rpm@modeset-non-lpsp-stress.html

  * igt@kms_pm_rpm@package-g7:
    - shard-tglu-1:       NOTRUN -> [SKIP][187] ([i915#15403])
   [187]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@kms_pm_rpm@package-g7.html

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

  * igt@kms_psr2_sf@fbc-pr-cursor-plane-move-continuous-sf:
    - shard-dg1:          NOTRUN -> [SKIP][189] ([i915#11520])
   [189]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg1-18/igt@kms_psr2_sf@fbc-pr-cursor-plane-move-continuous-sf.html

  * igt@kms_psr2_sf@fbc-psr2-plane-move-sf-dmg-area:
    - shard-glk:          NOTRUN -> [SKIP][190] ([i915#11520]) +2 other tests skip
   [190]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-glk1/igt@kms_psr2_sf@fbc-psr2-plane-move-sf-dmg-area.html

  * igt@kms_psr2_sf@pr-cursor-plane-move-continuous-sf:
    - shard-glk10:        NOTRUN -> [SKIP][191] ([i915#11520]) +2 other tests skip
   [191]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-glk10/igt@kms_psr2_sf@pr-cursor-plane-move-continuous-sf.html

  * igt@kms_psr2_sf@pr-overlay-plane-move-continuous-exceed-fully-sf:
    - shard-tglu:         NOTRUN -> [SKIP][192] ([i915#11520]) +3 other tests skip
   [192]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-3/igt@kms_psr2_sf@pr-overlay-plane-move-continuous-exceed-fully-sf.html

  * igt@kms_psr2_sf@pr-primary-plane-update-sf-dmg-area-big-fb:
    - shard-rkl:          NOTRUN -> [SKIP][193] ([i915#11520]) +2 other tests skip
   [193]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-2/igt@kms_psr2_sf@pr-primary-plane-update-sf-dmg-area-big-fb.html

  * igt@kms_psr2_sf@psr2-primary-plane-update-sf-dmg-area-big-fb:
    - shard-tglu-1:       NOTRUN -> [SKIP][194] ([i915#11520]) +5 other tests skip
   [194]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@kms_psr2_sf@psr2-primary-plane-update-sf-dmg-area-big-fb.html

  * igt@kms_psr2_su@page_flip-nv12:
    - shard-tglu-1:       NOTRUN -> [SKIP][195] ([i915#9683])
   [195]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@kms_psr2_su@page_flip-nv12.html

  * igt@kms_psr2_su@page_flip-xrgb8888:
    - shard-rkl:          NOTRUN -> [SKIP][196] ([i915#9683])
   [196]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-7/igt@kms_psr2_su@page_flip-xrgb8888.html

  * igt@kms_psr@fbc-psr2-basic:
    - shard-dg1:          NOTRUN -> [SKIP][197] ([i915#1072] / [i915#9732]) +5 other tests skip
   [197]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg1-18/igt@kms_psr@fbc-psr2-basic.html

  * igt@kms_psr@fbc-psr2-sprite-render:
    - shard-tglu-1:       NOTRUN -> [SKIP][198] ([i915#9732]) +12 other tests skip
   [198]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@kms_psr@fbc-psr2-sprite-render.html

  * igt@kms_psr@psr2-cursor-plane-onoff:
    - shard-tglu:         NOTRUN -> [SKIP][199] ([i915#9732]) +9 other tests skip
   [199]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-8/igt@kms_psr@psr2-cursor-plane-onoff.html

  * igt@kms_psr@psr2-primary-mmap-gtt:
    - shard-rkl:          NOTRUN -> [SKIP][200] ([i915#1072] / [i915#9732]) +10 other tests skip
   [200]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-7/igt@kms_psr@psr2-primary-mmap-gtt.html

  * igt@kms_psr_stress_test@flip-primary-invalidate-overlay:
    - shard-rkl:          NOTRUN -> [SKIP][201] ([i915#15949])
   [201]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-2/igt@kms_psr_stress_test@flip-primary-invalidate-overlay.html

  * igt@kms_psr_stress_test@invalidate-primary-flip-overlay:
    - shard-tglu-1:       NOTRUN -> [SKIP][202] ([i915#15949])
   [202]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@kms_psr_stress_test@invalidate-primary-flip-overlay.html

  * igt@kms_rotation_crc@multiplane-rotation-cropping-bottom:
    - shard-glk10:        NOTRUN -> [INCOMPLETE][203] ([i915#15500] / [i915#16184])
   [203]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-glk10/igt@kms_rotation_crc@multiplane-rotation-cropping-bottom.html

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

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

  * igt@kms_scaling_modes@scaling-mode-full:
    - shard-dg1:          NOTRUN -> [SKIP][206] ([i915#3555])
   [206]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg1-18/igt@kms_scaling_modes@scaling-mode-full.html

  * igt@kms_scaling_modes@scaling-mode-full-aspect:
    - shard-tglu:         NOTRUN -> [SKIP][207] ([i915#3555]) +1 other test skip
   [207]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-8/igt@kms_scaling_modes@scaling-mode-full-aspect.html

  * igt@kms_setmode@basic-clone-single-crtc:
    - shard-rkl:          NOTRUN -> [SKIP][208] ([i915#3555]) +4 other tests skip
   [208]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-5/igt@kms_setmode@basic-clone-single-crtc.html

  * igt@kms_vrr@flipline:
    - shard-rkl:          NOTRUN -> [SKIP][209] ([i915#15243] / [i915#3555])
   [209]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-2/igt@kms_vrr@flipline.html

  * igt@kms_vrr@lobf:
    - shard-rkl:          NOTRUN -> [SKIP][210] ([i915#11920])
   [210]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-5/igt@kms_vrr@lobf.html

  * igt@kms_vrr@negative-basic:
    - shard-dg2:          [PASS][211] -> [SKIP][212] ([i915#3555] / [i915#9906])
   [211]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-dg2-10/igt@kms_vrr@negative-basic.html
   [212]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg2-7/igt@kms_vrr@negative-basic.html

  * igt@kms_vrr@seamless-rr-switch-drrs:
    - shard-rkl:          NOTRUN -> [SKIP][213] ([i915#9906])
   [213]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-2/igt@kms_vrr@seamless-rr-switch-drrs.html

  * igt@perf@mi-rpc:
    - shard-rkl:          NOTRUN -> [SKIP][214] ([i915#2434])
   [214]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-2/igt@perf@mi-rpc.html

  * igt@perf@per-context-mode-unprivileged:
    - shard-rkl:          NOTRUN -> [SKIP][215] ([i915#2435])
   [215]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-2/igt@perf@per-context-mode-unprivileged.html

  * igt@perf_pmu@busy-double-start@rcs0:
    - shard-mtlp:         [PASS][216] -> [FAIL][217] ([i915#4349])
   [216]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-mtlp-8/igt@perf_pmu@busy-double-start@rcs0.html
   [217]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-mtlp-2/igt@perf_pmu@busy-double-start@rcs0.html

  * igt@prime_udl@share-import:
    - shard-rkl:          NOTRUN -> [SKIP][218] ([i915#16420])
   [218]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-2/igt@prime_udl@share-import.html

  * igt@sriov_basic@bind-unbind-vf@vf-1:
    - shard-tglu-1:       NOTRUN -> [SKIP][219] ([i915#16066]) +9 other tests skip
   [219]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-1/igt@sriov_basic@bind-unbind-vf@vf-1.html

  * igt@sriov_basic@enable-vfs-bind-unbind-each-numvfs-all:
    - shard-tglu:         NOTRUN -> [SKIP][220] ([i915#16066])
   [220]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-8/igt@sriov_basic@enable-vfs-bind-unbind-each-numvfs-all.html

  
#### Possible fixes ####

  * igt@gem_ccs@suspend-resume@linear-compressed-compfmt0-smem-lmem0:
    - shard-dg2:          [INCOMPLETE][221] ([i915#13356] / [i915#16348]) -> [PASS][222]
   [221]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-dg2-6/igt@gem_ccs@suspend-resume@linear-compressed-compfmt0-smem-lmem0.html
   [222]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg2-3/igt@gem_ccs@suspend-resume@linear-compressed-compfmt0-smem-lmem0.html

  * igt@gem_exec_big@single:
    - shard-tglu:         [FAIL][223] ([i915#15816]) -> [PASS][224]
   [223]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-tglu-2/igt@gem_exec_big@single.html
   [224]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-7/igt@gem_exec_big@single.html

  * igt@gem_softpin@noreloc-s3:
    - shard-rkl:          [INCOMPLETE][225] ([i915#13809] / [i915#16226]) -> [PASS][226]
   [225]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-3/igt@gem_softpin@noreloc-s3.html
   [226]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-2/igt@gem_softpin@noreloc-s3.html

  * igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-rc-ccs-cc:
    - shard-rkl:          [ABORT][227] ([i915#15132]) -> [PASS][228]
   [227]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-1/igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-rc-ccs-cc.html
   [228]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-5/igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-rc-ccs-cc.html

  * igt@kms_dp_aux_dev@basic:
    - shard-dg2:          [SKIP][229] ([i915#1257]) -> [PASS][230]
   [229]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-dg2-5/igt@kms_dp_aux_dev@basic.html
   [230]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg2-10/igt@kms_dp_aux_dev@basic.html

  * igt@kms_fbcon_fbt@fbc-suspend:
    - shard-rkl:          [INCOMPLETE][231] ([i915#9878]) -> [PASS][232]
   [231]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-3/igt@kms_fbcon_fbt@fbc-suspend.html
   [232]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-2/igt@kms_fbcon_fbt@fbc-suspend.html

  * igt@kms_frontbuffer_tracking@fbchdr-1p-offscreen-pri-indfb-draw-pwrite:
    - shard-dg2:          [SKIP][233] ([i915#15989]) -> [PASS][234] +3 other tests pass
   [233]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-dg2-5/igt@kms_frontbuffer_tracking@fbchdr-1p-offscreen-pri-indfb-draw-pwrite.html
   [234]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg2-10/igt@kms_frontbuffer_tracking@fbchdr-1p-offscreen-pri-indfb-draw-pwrite.html

  * igt@kms_frontbuffer_tracking@hdr-1p-primscrn-cur-indfb-draw-blt:
    - shard-rkl:          [SKIP][235] ([i915#15989]) -> [PASS][236] +2 other tests pass
   [235]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-8/igt@kms_frontbuffer_tracking@hdr-1p-primscrn-cur-indfb-draw-blt.html
   [236]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-1/igt@kms_frontbuffer_tracking@hdr-1p-primscrn-cur-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@hdr-2p-scndscrn-pri-shrfb-draw-mmap-gtt:
    - shard-glk:          [SKIP][237] -> [PASS][238] +34 other tests pass
   [237]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-glk2/igt@kms_frontbuffer_tracking@hdr-2p-scndscrn-pri-shrfb-draw-mmap-gtt.html
   [238]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-glk8/igt@kms_frontbuffer_tracking@hdr-2p-scndscrn-pri-shrfb-draw-mmap-gtt.html

  * igt@kms_hdr@static-toggle-dpms:
    - shard-dg2:          [SKIP][239] ([i915#16518] / [i915#3555] / [i915#8228]) -> [PASS][240]
   [239]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-dg2-5/igt@kms_hdr@static-toggle-dpms.html
   [240]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg2-10/igt@kms_hdr@static-toggle-dpms.html

  * igt@kms_pm_rpm@modeset-non-lpsp:
    - shard-dg1:          [SKIP][241] ([i915#15073]) -> [PASS][242]
   [241]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-dg1-15/igt@kms_pm_rpm@modeset-non-lpsp.html
   [242]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg1-13/igt@kms_pm_rpm@modeset-non-lpsp.html

  * igt@kms_selftest@drm_framebuffer@drm_test_framebuffer_create:
    - shard-glk:          [ABORT][243] ([i915#13179]) -> [PASS][244]
   [243]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-glk6/igt@kms_selftest@drm_framebuffer@drm_test_framebuffer_create.html
   [244]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-glk1/igt@kms_selftest@drm_framebuffer@drm_test_framebuffer_create.html

  
#### Warnings ####

  * igt@device_reset@cold-reset-bound:
    - shard-rkl:          [SKIP][245] ([i915#11078] / [i915#14544]) -> [SKIP][246] ([i915#11078])
   [245]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-6/igt@device_reset@cold-reset-bound.html
   [246]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-5/igt@device_reset@cold-reset-bound.html

  * igt@gem_exec_reloc@basic-gtt-wc:
    - shard-rkl:          [SKIP][247] ([i915#14544] / [i915#3281]) -> [SKIP][248] ([i915#3281]) +3 other tests skip
   [247]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-6/igt@gem_exec_reloc@basic-gtt-wc.html
   [248]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-1/igt@gem_exec_reloc@basic-gtt-wc.html

  * igt@gem_lmem_swapping@massive:
    - shard-rkl:          [SKIP][249] ([i915#14544] / [i915#4613]) -> [SKIP][250] ([i915#4613]) +1 other test skip
   [249]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-6/igt@gem_lmem_swapping@massive.html
   [250]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-1/igt@gem_lmem_swapping@massive.html

  * igt@gem_partial_pwrite_pread@writes-after-reads:
    - shard-rkl:          [SKIP][251] ([i915#14544] / [i915#3282]) -> [SKIP][252] ([i915#3282]) +1 other test skip
   [251]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-6/igt@gem_partial_pwrite_pread@writes-after-reads.html
   [252]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-5/igt@gem_partial_pwrite_pread@writes-after-reads.html

  * igt@gem_userptr_blits@coherency-unsync:
    - shard-rkl:          [SKIP][253] ([i915#14544] / [i915#3297]) -> [SKIP][254] ([i915#3297]) +1 other test skip
   [253]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-6/igt@gem_userptr_blits@coherency-unsync.html
   [254]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-5/igt@gem_userptr_blits@coherency-unsync.html

  * igt@gen9_exec_parse@bb-large:
    - shard-rkl:          [SKIP][255] ([i915#14544] / [i915#2527]) -> [SKIP][256] ([i915#2527])
   [255]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-6/igt@gen9_exec_parse@bb-large.html
   [256]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-5/igt@gen9_exec_parse@bb-large.html

  * igt@i915_pm_rc6_residency@media-rc6-accuracy:
    - shard-rkl:          [SKIP][257] ([i915#14544] / [i915#16080] / [i915#16166]) -> [SKIP][258] ([i915#16080] / [i915#16166])
   [257]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-6/igt@i915_pm_rc6_residency@media-rc6-accuracy.html
   [258]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-1/igt@i915_pm_rc6_residency@media-rc6-accuracy.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180-hflip:
    - shard-rkl:          [SKIP][259] ([i915#14544] / [i915#5286]) -> [SKIP][260] ([i915#5286]) +2 other tests skip
   [259]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-6/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180-hflip.html
   [260]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-1/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180-hflip.html

  * igt@kms_big_fb@x-tiled-32bpp-rotate-270:
    - shard-rkl:          [SKIP][261] ([i915#3638]) -> [SKIP][262] ([i915#14544] / [i915#3638])
   [261]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-7/igt@kms_big_fb@x-tiled-32bpp-rotate-270.html
   [262]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-6/igt@kms_big_fb@x-tiled-32bpp-rotate-270.html

  * igt@kms_big_fb@y-tiled-64bpp-rotate-90:
    - shard-rkl:          [SKIP][263] ([i915#14544] / [i915#3638]) -> [SKIP][264] ([i915#3638])
   [263]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-6/igt@kms_big_fb@y-tiled-64bpp-rotate-90.html
   [264]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-5/igt@kms_big_fb@y-tiled-64bpp-rotate-90.html

  * igt@kms_ccs@bad-aux-stride-yf-tiled-ccs:
    - shard-rkl:          [SKIP][265] ([i915#14098] / [i915#14544] / [i915#6095]) -> [SKIP][266] ([i915#14098] / [i915#6095]) +6 other tests skip
   [265]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-6/igt@kms_ccs@bad-aux-stride-yf-tiled-ccs.html
   [266]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-5/igt@kms_ccs@bad-aux-stride-yf-tiled-ccs.html

  * igt@kms_ccs@crc-primary-basic-4-tiled-dg2-rc-ccs@pipe-a-hdmi-a-2:
    - shard-rkl:          [SKIP][267] ([i915#14544] / [i915#6095]) -> [SKIP][268] ([i915#6095]) +1 other test skip
   [267]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-6/igt@kms_ccs@crc-primary-basic-4-tiled-dg2-rc-ccs@pipe-a-hdmi-a-2.html
   [268]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-1/igt@kms_ccs@crc-primary-basic-4-tiled-dg2-rc-ccs@pipe-a-hdmi-a-2.html

  * igt@kms_chamelium_frames@hdmi-crc-fast:
    - shard-rkl:          [SKIP][269] ([i915#11151] / [i915#14544] / [i915#7828]) -> [SKIP][270] ([i915#11151] / [i915#7828]) +1 other test skip
   [269]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-6/igt@kms_chamelium_frames@hdmi-crc-fast.html
   [270]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-5/igt@kms_chamelium_frames@hdmi-crc-fast.html

  * igt@kms_content_protection@content-type-change:
    - shard-rkl:          [SKIP][271] ([i915#14544] / [i915#15865]) -> [SKIP][272] ([i915#15865])
   [271]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-6/igt@kms_content_protection@content-type-change.html
   [272]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-5/igt@kms_content_protection@content-type-change.html

  * igt@kms_content_protection@dp-mst-lic-type-0:
    - shard-rkl:          [SKIP][273] ([i915#15330] / [i915#3116]) -> [SKIP][274] ([i915#14544] / [i915#15330] / [i915#3116])
   [273]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-7/igt@kms_content_protection@dp-mst-lic-type-0.html
   [274]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-6/igt@kms_content_protection@dp-mst-lic-type-0.html

  * igt@kms_content_protection@legacy:
    - shard-dg2:          [SKIP][275] ([i915#15865]) -> [FAIL][276] ([i915#7173])
   [275]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-dg2-5/igt@kms_content_protection@legacy.html
   [276]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg2-10/igt@kms_content_protection@legacy.html

  * igt@kms_content_protection@uevent:
    - shard-dg2:          [FAIL][277] ([i915#1339] / [i915#7173]) -> [SKIP][278] ([i915#15865])
   [277]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-dg2-10/igt@kms_content_protection@uevent.html
   [278]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg2-5/igt@kms_content_protection@uevent.html

  * igt@kms_cursor_crc@cursor-random-512x512:
    - shard-dg2:          [SKIP][279] ([i915#13049]) -> [SKIP][280] ([i915#13049] / [i915#3359]) +1 other test skip
   [279]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-dg2-5/igt@kms_cursor_crc@cursor-random-512x512.html
   [280]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg2-10/igt@kms_cursor_crc@cursor-random-512x512.html

  * igt@kms_cursor_crc@cursor-rapid-movement-32x10:
    - shard-rkl:          [SKIP][281] ([i915#14544] / [i915#3555]) -> [SKIP][282] ([i915#3555]) +1 other test skip
   [281]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-6/igt@kms_cursor_crc@cursor-rapid-movement-32x10.html
   [282]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-5/igt@kms_cursor_crc@cursor-rapid-movement-32x10.html

  * igt@kms_cursor_crc@cursor-sliding-512x512:
    - shard-dg2:          [SKIP][283] ([i915#13049] / [i915#3359]) -> [SKIP][284] ([i915#13049])
   [283]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-dg2-10/igt@kms_cursor_crc@cursor-sliding-512x512.html
   [284]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg2-7/igt@kms_cursor_crc@cursor-sliding-512x512.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy:
    - shard-rkl:          [SKIP][285] ([i915#14544] / [i915#4103]) -> [SKIP][286] ([i915#4103])
   [285]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-6/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html
   [286]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-1/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html

  * igt@kms_display_modes@extended-mode-basic:
    - shard-rkl:          [SKIP][287] ([i915#13691] / [i915#14544]) -> [SKIP][288] ([i915#13691])
   [287]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-6/igt@kms_display_modes@extended-mode-basic.html
   [288]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-5/igt@kms_display_modes@extended-mode-basic.html

  * igt@kms_dsc@dsc-fractional-bpp:
    - shard-rkl:          [SKIP][289] ([i915#14544] / [i915#16361]) -> [SKIP][290] ([i915#16361]) +1 other test skip
   [289]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-6/igt@kms_dsc@dsc-fractional-bpp.html
   [290]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-1/igt@kms_dsc@dsc-fractional-bpp.html

  * igt@kms_dsc@dsc-fractional-bpp-bigjoiner:
    - shard-rkl:          [SKIP][291] ([i915#16361]) -> [SKIP][292] ([i915#14544] / [i915#16361])
   [291]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-7/igt@kms_dsc@dsc-fractional-bpp-bigjoiner.html
   [292]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-6/igt@kms_dsc@dsc-fractional-bpp-bigjoiner.html

  * igt@kms_flip@2x-flip-vs-dpms-off-vs-modeset:
    - shard-rkl:          [SKIP][293] ([i915#14544] / [i915#9934]) -> [SKIP][294] ([i915#9934]) +1 other test skip
   [293]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-6/igt@kms_flip@2x-flip-vs-dpms-off-vs-modeset.html
   [294]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-5/igt@kms_flip@2x-flip-vs-dpms-off-vs-modeset.html

  * igt@kms_flip@2x-flip-vs-suspend:
    - shard-glk:          [INCOMPLETE][295] ([i915#12745] / [i915#4839]) -> [INCOMPLETE][296] ([i915#12314] / [i915#12745] / [i915#4839] / [i915#6113])
   [295]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-glk6/igt@kms_flip@2x-flip-vs-suspend.html
   [296]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-glk5/igt@kms_flip@2x-flip-vs-suspend.html

  * igt@kms_flip@2x-flip-vs-suspend@ac-hdmi-a1-hdmi-a2:
    - shard-glk:          [INCOMPLETE][297] ([i915#12745]) -> [INCOMPLETE][298] ([i915#12314] / [i915#12745])
   [297]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-glk6/igt@kms_flip@2x-flip-vs-suspend@ac-hdmi-a1-hdmi-a2.html
   [298]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-glk5/igt@kms_flip@2x-flip-vs-suspend@ac-hdmi-a1-hdmi-a2.html

  * igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-16bpp-4tile-upscaling:
    - shard-rkl:          [SKIP][299] ([i915#15643]) -> [SKIP][300] ([i915#14544] / [i915#15643])
   [299]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-7/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-16bpp-4tile-upscaling.html
   [300]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-6/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-16bpp-4tile-upscaling.html

  * igt@kms_flip_scaled_crc@flip-p010-4tile-to-p016-4tile:
    - shard-rkl:          [SKIP][301] ([i915#14544] / [i915#15643]) -> [SKIP][302] ([i915#15643]) +2 other tests skip
   [301]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-6/igt@kms_flip_scaled_crc@flip-p010-4tile-to-p016-4tile.html
   [302]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-1/igt@kms_flip_scaled_crc@flip-p010-4tile-to-p016-4tile.html

  * igt@kms_frontbuffer_tracking@fbchdr-suspend:
    - shard-rkl:          [SKIP][303] ([i915#15989]) -> [ABORT][304] ([i915#15132])
   [303]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-8/igt@kms_frontbuffer_tracking@fbchdr-suspend.html
   [304]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-1/igt@kms_frontbuffer_tracking@fbchdr-suspend.html

  * igt@kms_frontbuffer_tracking@fbchdr-tiling-4:
    - shard-rkl:          [SKIP][305] ([i915#14544] / [i915#5439]) -> [SKIP][306] ([i915#5439])
   [305]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-6/igt@kms_frontbuffer_tracking@fbchdr-tiling-4.html
   [306]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-1/igt@kms_frontbuffer_tracking@fbchdr-tiling-4.html

  * igt@kms_frontbuffer_tracking@fbcpsrhdr-1p-offscreen-pri-indfb-draw-mmap-gtt:
    - shard-rkl:          [SKIP][307] ([i915#15102]) -> [SKIP][308] ([i915#14544] / [i915#15102]) +2 other tests skip
   [307]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-7/igt@kms_frontbuffer_tracking@fbcpsrhdr-1p-offscreen-pri-indfb-draw-mmap-gtt.html
   [308]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsrhdr-1p-offscreen-pri-indfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbcpsrhdr-2p-scndscrn-cur-indfb-draw-mmap-wc:
    - shard-rkl:          [SKIP][309] ([i915#14544]) -> [SKIP][310] +38 other tests skip
   [309]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsrhdr-2p-scndscrn-cur-indfb-draw-mmap-wc.html
   [310]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-1/igt@kms_frontbuffer_tracking@fbcpsrhdr-2p-scndscrn-cur-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbcpsrhdr-rgb101010-draw-mmap-cpu:
    - shard-rkl:          [SKIP][311] ([i915#14544] / [i915#15102]) -> [SKIP][312] ([i915#15102]) +7 other tests skip
   [311]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsrhdr-rgb101010-draw-mmap-cpu.html
   [312]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-1/igt@kms_frontbuffer_tracking@fbcpsrhdr-rgb101010-draw-mmap-cpu.html

  * igt@kms_frontbuffer_tracking@psr-1p-pri-indfb-multidraw:
    - shard-rkl:          [SKIP][313] ([i915#14544] / [i915#15102] / [i915#3023]) -> [SKIP][314] ([i915#15102] / [i915#3023]) +5 other tests skip
   [313]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-6/igt@kms_frontbuffer_tracking@psr-1p-pri-indfb-multidraw.html
   [314]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-1/igt@kms_frontbuffer_tracking@psr-1p-pri-indfb-multidraw.html

  * igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-indfb-draw-render:
    - shard-dg2:          [SKIP][315] ([i915#10433] / [i915#15102]) -> [SKIP][316] ([i915#15102]) +1 other test skip
   [315]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-dg2-4/igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-indfb-draw-render.html
   [316]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg2-8/igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-indfb-draw-render.html

  * igt@kms_frontbuffer_tracking@psr-2p-primscrn-cur-indfb-draw-render:
    - shard-rkl:          [SKIP][317] -> [SKIP][318] ([i915#14544]) +5 other tests skip
   [317]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-7/igt@kms_frontbuffer_tracking@psr-2p-primscrn-cur-indfb-draw-render.html
   [318]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-6/igt@kms_frontbuffer_tracking@psr-2p-primscrn-cur-indfb-draw-render.html

  * igt@kms_frontbuffer_tracking@psr-2p-scndscrn-pri-indfb-draw-mmap-wc:
    - shard-rkl:          [SKIP][319] ([i915#14544] / [i915#1825]) -> [SKIP][320] ([i915#1825]) +1 other test skip
   [319]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-6/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-pri-indfb-draw-mmap-wc.html
   [320]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-5/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-pri-indfb-draw-mmap-wc.html

  * igt@kms_joiner@invalid-modeset-force-ultra-joiner:
    - shard-rkl:          [SKIP][321] ([i915#15458]) -> [SKIP][322] ([i915#14544] / [i915#15458])
   [321]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-7/igt@kms_joiner@invalid-modeset-force-ultra-joiner.html
   [322]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-6/igt@kms_joiner@invalid-modeset-force-ultra-joiner.html

  * igt@kms_joiner@invalid-modeset-ultra-joiner:
    - shard-rkl:          [SKIP][323] ([i915#14544] / [i915#15458]) -> [SKIP][324] ([i915#15458])
   [323]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-6/igt@kms_joiner@invalid-modeset-ultra-joiner.html
   [324]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-5/igt@kms_joiner@invalid-modeset-ultra-joiner.html

  * igt@kms_pipe_stress@stress-xrgb8888-untiled:
    - shard-glk:          [DMESG-WARN][325] ([i915#118]) -> [DMESG-FAIL][326] ([i915#118])
   [325]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-glk8/igt@kms_pipe_stress@stress-xrgb8888-untiled.html
   [326]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-glk9/igt@kms_pipe_stress@stress-xrgb8888-untiled.html

  * igt@kms_plane@pixel-format-4-tiled-dg2-rc-ccs-modifier-source-clamping:
    - shard-dg1:          [SKIP][327] ([i915#15709] / [i915#4423]) -> [SKIP][328] ([i915#15709])
   [327]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-dg1-16/igt@kms_plane@pixel-format-4-tiled-dg2-rc-ccs-modifier-source-clamping.html
   [328]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg1-15/igt@kms_plane@pixel-format-4-tiled-dg2-rc-ccs-modifier-source-clamping.html

  * igt@kms_plane@pixel-format-y-tiled-ccs-modifier:
    - shard-rkl:          [SKIP][329] ([i915#14544] / [i915#15709]) -> [SKIP][330] ([i915#15709]) +1 other test skip
   [329]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-6/igt@kms_plane@pixel-format-y-tiled-ccs-modifier.html
   [330]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-5/igt@kms_plane@pixel-format-y-tiled-ccs-modifier.html

  * igt@kms_plane_lowres@tiling-yf:
    - shard-rkl:          [SKIP][331] ([i915#3555]) -> [SKIP][332] ([i915#14544] / [i915#3555])
   [331]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-7/igt@kms_plane_lowres@tiling-yf.html
   [332]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-6/igt@kms_plane_lowres@tiling-yf.html

  * igt@kms_plane_scaling@plane-downscale-factor-0-75-with-rotation@pipe-a:
    - shard-rkl:          [SKIP][333] ([i915#14544] / [i915#15329]) -> [SKIP][334] ([i915#15329]) +3 other tests skip
   [333]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-6/igt@kms_plane_scaling@plane-downscale-factor-0-75-with-rotation@pipe-a.html
   [334]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-1/igt@kms_plane_scaling@plane-downscale-factor-0-75-with-rotation@pipe-a.html

  * igt@kms_pm_dc@dc6-dpms:
    - shard-tglu:         [FAIL][335] ([i915#16479]) -> [SKIP][336] ([i915#15128])
   [335]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-tglu-4/igt@kms_pm_dc@dc6-dpms.html
   [336]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-tglu-6/igt@kms_pm_dc@dc6-dpms.html

  * igt@kms_psr2_sf@pr-overlay-plane-move-continuous-sf:
    - shard-rkl:          [SKIP][337] ([i915#11520] / [i915#14544]) -> [SKIP][338] ([i915#11520]) +2 other tests skip
   [337]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-6/igt@kms_psr2_sf@pr-overlay-plane-move-continuous-sf.html
   [338]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-5/igt@kms_psr2_sf@pr-overlay-plane-move-continuous-sf.html

  * igt@kms_psr@fbc-psr-sprite-plane-move:
    - shard-rkl:          [SKIP][339] ([i915#1072] / [i915#14544] / [i915#9732]) -> [SKIP][340] ([i915#1072] / [i915#9732]) +4 other tests skip
   [339]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-6/igt@kms_psr@fbc-psr-sprite-plane-move.html
   [340]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-5/igt@kms_psr@fbc-psr-sprite-plane-move.html

  * igt@kms_psr@psr-cursor-plane-move:
    - shard-rkl:          [SKIP][341] ([i915#1072] / [i915#9732]) -> [SKIP][342] ([i915#1072] / [i915#14544] / [i915#9732]) +1 other test skip
   [341]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-7/igt@kms_psr@psr-cursor-plane-move.html
   [342]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-6/igt@kms_psr@psr-cursor-plane-move.html

  * igt@kms_rotation_crc@primary-yf-tiled-reflect-x-270:
    - shard-dg2:          [SKIP][343] ([i915#15867] / [i915#5190]) -> [SKIP][344] ([i915#12755] / [i915#15867] / [i915#5190])
   [343]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-dg2-10/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-270.html
   [344]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-dg2-7/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-270.html

  * igt@kms_selftest@drm_framebuffer@drm_test_framebuffer_free:
    - shard-glk:          [DMESG-FAIL][345] ([i915#13179]) -> [ABORT][346] ([i915#13179])
   [345]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-glk6/igt@kms_selftest@drm_framebuffer@drm_test_framebuffer_free.html
   [346]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-glk1/igt@kms_selftest@drm_framebuffer@drm_test_framebuffer_free.html

  * igt@sriov_basic@enable-vfs-bind-unbind-each:
    - shard-rkl:          [SKIP][347] ([i915#14544] / [i915#9917]) -> [SKIP][348] ([i915#9917])
   [347]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18810/shard-rkl-6/igt@sriov_basic@enable-vfs-bind-unbind-each.html
   [348]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_170304v1/shard-rkl-5/igt@sriov_basic@enable-vfs-bind-unbind-each.html

  
  [i915#10056]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10056
  [i915#10307]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10307
  [i915#10433]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10433
  [i915#10434]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10434
  [i915#1072]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1072
  [i915#11078]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11078
  [i915#11151]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11151
  [i915#11520]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11520
  [i915#118]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/118
  [i915#11920]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11920
  [i915#12313]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12313
  [i915#12314]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12314
  [i915#12343]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12343
  [i915#12454]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12454
  [i915#1257]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1257
  [i915#12712]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12712
  [i915#12713]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12713
  [i915#12745]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12745
  [i915#12755]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12755
  [i915#12756]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12756
  [i915#12805]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12805
  [i915#13049]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13049
  [i915#13179]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13179
  [i915#13356]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13356
  [i915#1339]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1339
  [i915#13476]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13476
  [i915#13562]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13562
  [i915#13566]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13566
  [i915#13691]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13691
  [i915#13707]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13707
  [i915#13717]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13717
  [i915#13748]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13748
  [i915#13749]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13749
  [i915#13781]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13781
  [i915#13790]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13790
  [i915#13809]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13809
  [i915#13958]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13958
  [i915#14098]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14098
  [i915#14259]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14259
  [i915#14498]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14498
  [i915#14544]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14544
  [i915#14600]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14600
  [i915#14702]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14702
  [i915#14712]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14712
  [i915#14888]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14888
  [i915#15073]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15073
  [i915#15102]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15102
  [i915#15128]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15128
  [i915#15132]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15132
  [i915#15243]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15243
  [i915#15329]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15329
  [i915#15330]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15330
  [i915#15403]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15403
  [i915#15458]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15458
  [i915#15459]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15459
  [i915#15460]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15460
  [i915#15500]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15500
  [i915#15582]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15582
  [i915#15643]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15643
  [i915#15678]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15678
  [i915#15709]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15709
  [i915#15739]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15739
  [i915#15815]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15815
  [i915#15816]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15816
  [i915#15865]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15865
  [i915#15867]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15867
  [i915#15948]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15948
  [i915#15949]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15949
  [i915#15989]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15989
  [i915#15990]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15990
  [i915#16056]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16056
  [i915#16066]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16066
  [i915#16080]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16080
  [i915#16081]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16081
  [i915#16166]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16166
  [i915#16182]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16182
  [i915#16184]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16184
  [i915#16226]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16226
  [i915#16348]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16348
  [i915#16361]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16361
  [i915#16386]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16386
  [i915#16420]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16420
  [i915#16471]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16471
  [i915#16479]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16479
  [i915#16518]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16518
  [i915#16593]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16593
  [i915#16600]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16600
  [i915#1769]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1769
  [i915#1825]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1825
  [i915#2065]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2065
  [i915#2190]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2190
  [i915#2434]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2434
  [i915#2435]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2435
  [i915#2527]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2527
  [i915#2658]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2658
  [i915#2681]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2681
  [i915#280]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/280
  [i915#2856]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2856
  [i915#3023]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3023
  [i915#3116]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3116
  [i915#3281]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3281
  [i915#3282]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3282
  [i915#3297]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3297
  [i915#3299]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3299
  [i915#3359]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3359
  [i915#3555]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3555
  [i915#3637]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3637
  [i915#3638]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3638
  [i915#3742]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3742
  [i915#3955]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3955
  [i915#4079]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4079
  [i915#4103]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4103
  [i915#4349]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4349
  [i915#4387]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4387
  [i915#4423]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4423
  [i915#4525]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4525
  [i915#4538]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4538
  [i915#4613]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4613
  [i915#4812]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4812
  [i915#4817]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4817
  [i915#4839]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4839
  [i915#5190]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5190
  [i915#5286]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5286
  [i915#5289]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5289
  [i915#5439]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5439
  [i915#6095]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6095
  [i915#6113]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6113
  [i915#6245]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6245
  [i915#6301]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6301
  [i915#6334]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6334
  [i915#6335]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6335
  [i915#6412]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6412
  [i915#6524]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6524
  [i915#7173]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7173
  [i915#7828]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7828
  [i915#8228]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8228
  [i915#8399]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8399
  [i915#8411]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8411
  [i915#8562]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8562
  [i915#8708]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8708
  [i915#9323]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9323
  [i915#9683]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9683
  [i915#9723]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9723
  [i915#9732]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9732
  [i915#9766]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9766
  [i915#9812]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9812
  [i915#9878]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9878
  [i915#9906]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9906
  [i915#9917]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9917
  [i915#9934]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9934


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

  * Linux: CI_DRM_18810 -> Patchwork_170304v1

  CI-20190529: 20190529
  CI_DRM_18810: 83d782d98f4ebb4a10b8ee107e3a389917e0b218 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_9003: 9003
  Patchwork_170304v1: 83d782d98f4ebb4a10b8ee107e3a389917e0b218 @ 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_170304v1/index.html

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

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

* Re: [PATCH v3 1/5] drm/i915/gem: Count mapped pages in a folio
  2026-07-13  9:58 ` [PATCH v3 1/5] drm/i915/gem: Count mapped pages in a folio Krzysztof Karas
@ 2026-07-15 11:18   ` Janusz Krzysztofik
  2026-07-20  8:08     ` Krzysztof Karas
  0 siblings, 1 reply; 24+ messages in thread
From: Janusz Krzysztofik @ 2026-07-15 11:18 UTC (permalink / raw)
  To: Krzysztof Karas, intel-gfx, dri-devel, iommu
  Cc: Andi Shyti, Robin Murphy, Jason Gunthorpe, Michał Grzelak,
	Sebastian Brzezinka, Krzysztof Niemiec

Hi Krzysztof,

Since reading your commit description I was not really able to understand
what the issue you were trying to fix was about, I'm providing some 
comments based on my understanding of the issue.

On Mon, 2026-07-13 at 09:58 +0000, Krzysztof Karas wrote:
> With addition of commit 029ae067431a
> ("drm/i915: Fix potential overflow of shmem scatterlist length")
> max_segment size was included in calculating a number of pages
> for the scatterlist. This meant that segment sizes considerably
> smaller than number of pages in a folio (see shmem_get_pages(),
> rebuild_st label for context), 

Two values of max_segment only could and still can be expected, either 
maximum capacity of a scatterlist, or PAGE_SIZE.  Before the blamed 
commit, that argument was mostly (unintentionally?) not respected when 
allocating pages from a folio to a scatterlist.  IOW, complete folios were 
always allocated, possibly overloading the scatterlist capacity,  
virtually never limited to PAGE_SIZE when requested via max_segment.

The blamed commit took care of scatterlist overloading, and
unintentionally also of respecting the max_segment == PAGE_SIZE case, by 
limiting the number of folio pages allocated to a single scatterlist not
to exceed max_segment, but failed to take care of correctly allocating 
remaining pages from folios larger than max_segment.  That's what this 
commit description should tell us about, I believe.

> were not enough to jump to the
> next folio, which has never been a problem before folios have
> been intoduced. In result, sg_set_folio() was called multiple
> times with nr_pages smaller than folio size, using multitude of
> scatterlists, 

I don't think it matters how many times sg_set_folio() was called or how 
many scatterlists were used, since we may expect them to be huge when 
shmem_sg_alloc_table() is called  with max_segment == PAGE_SIZE.

> all pointing to the beginning pages of the folio
> and never fully covering its range of pages.

Yeah, that's the real issue.  An offset within a folio should be tracked
and used when allocating pages still left in the folio.

> Track how many pages have already been counted in a folio

... and use that number as an offset on consecutive allocations from the 
same folio ...

> to ensure it is fully covered before reading next folio.

> Fixes: 029ae067431a ("drm/i915: Fix potential overflow of shmem scatterlist length")
> Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/work_items/15816
> Signed-off-by: Krzysztof Karas <krzysztof.karas@intel.com>
> ---
> v3:
>  * Fixed a bug that caused first folio to never be considered.
> 
>  drivers/gpu/drm/i915/gem/i915_gem_shmem.c | 120 +++++++++++++---------
>  1 file changed, 70 insertions(+), 50 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
> index 06543ae60706..0011d76f5b8c 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
> @@ -68,10 +68,13 @@ int shmem_sg_alloc_table(struct drm_i915_private *i915, struct sg_table *st,
>  			 unsigned int max_segment)
>  {
>  	unsigned int page_count; /* restricted by sg_alloc_table */
> -	unsigned long i;
> +	unsigned long next_pfn = 0; /* suppress gcc warning */
> +	unsigned long folio_start = 0;
> +	unsigned long folio_end = 0;
> +	struct folio *folio = NULL;
>  	struct scatterlist *sg;
> -	unsigned long next_pfn = 0;	/* suppress gcc warning */
>  	gfp_t noreclaim;
> +	unsigned long i;
>  	int ret;
>  
>  	if (overflows_type(size / PAGE_SIZE, page_count))
> @@ -101,7 +104,7 @@ int shmem_sg_alloc_table(struct drm_i915_private *i915, struct sg_table *st,
>  	sg = st->sgl;
>  	st->nents = 0;
>  	for (i = 0; i < page_count; i++) {
> -		struct folio *folio;
> +		unsigned long folio_page_index = 0;
>  		unsigned long nr_pages;
>  		const unsigned int shrink[] = {
>  			I915_SHRINK_BOUND | I915_SHRINK_UNBOUND,
> @@ -109,71 +112,87 @@ int shmem_sg_alloc_table(struct drm_i915_private *i915, struct sg_table *st,
>  		}, *s = shrink;
>  		gfp_t gfp = noreclaim;
>  
> -		do {
> -			cond_resched();
> -			folio = shmem_read_folio_gfp(mapping, i, gfp);
> -			if (!IS_ERR(folio))
> -				break;
> -
> -			if (!*s) {
> -				ret = PTR_ERR(folio);
> -				goto err_sg;
> -			}
> -
> -			i915_gem_shrink(NULL, i915, 2 * page_count, NULL, *s++);
> -
> -			/*
> -			 * We've tried hard to allocate the memory by reaping
> -			 * our own buffer, now let the real VM do its job and
> -			 * go down in flames if truly OOM.
> -			 *
> -			 * However, since graphics tend to be disposable,
> -			 * defer the oom here by reporting the ENOMEM back
> -			 * to userspace.
> -			 */
> -			if (!*s) {
> -				/* reclaim and warn, but no oom */
> -				gfp = mapping_gfp_mask(mapping);
> +		/* Grab the next folio if we exhausted the current one. */
> +		if (!i || i > folio_end) {
> +			do {
> +				cond_resched();
> +				folio = shmem_read_folio_gfp(mapping, i, gfp);
> +				if (!IS_ERR(folio))
> +					break;
> +
> +				if (!*s) {
> +					ret = PTR_ERR(folio);
> +					goto err_sg;
> +				}
> +
> +				i915_gem_shrink(NULL, i915, 2 * page_count, NULL, *s++);
>  
>  				/*
> -				 * Our bo are always dirty and so we require
> -				 * kswapd to reclaim our pages (direct reclaim
> -				 * does not effectively begin pageout of our
> -				 * buffers on its own). However, direct reclaim
> -				 * only waits for kswapd when under allocation
> -				 * congestion. So as a result __GFP_RECLAIM is
> -				 * unreliable and fails to actually reclaim our
> -				 * dirty pages -- unless you try over and over
> -				 * again with !__GFP_NORETRY. However, we still
> -				 * want to fail this allocation rather than
> -				 * trigger the out-of-memory killer and for
> -				 * this we want __GFP_RETRY_MAYFAIL.
> -				 */
> -				gfp |= __GFP_RETRY_MAYFAIL | __GFP_NOWARN;
> -			}
> -		} while (1);
> +				* We've tried hard to allocate the memory by reaping
> +				* our own buffer, now let the real VM do its job and
> +				* go down in flames if truly OOM.
> +				*
> +				* However, since graphics tend to be disposable,
> +				* defer the oom here by reporting the ENOMEM back
> +				* to userspace.
> +				*/
> +				if (!*s) {
> +					/* reclaim and warn, but no oom */
> +					gfp = mapping_gfp_mask(mapping);
> +
> +					/*
> +					 * Our bo are always dirty and so we require
> +					 * kswapd to reclaim our pages (direct reclaim
> +					 * does not effectively begin pageout of our
> +					 * buffers on its own). However, direct reclaim
> +					 * only waits for kswapd when under allocation
> +					 * congestion. So as a result __GFP_RECLAIM is
> +					 * unreliable and fails to actually reclaim our
> +					 * dirty pages -- unless you try over and over
> +					 * again with !__GFP_NORETRY. However, we still
> +					 * want to fail this allocation rather than
> +					 * trigger the out-of-memory killer and for
> +					 * this we want __GFP_RETRY_MAYFAIL.
> +					 */
> +					gfp |= __GFP_RETRY_MAYFAIL | __GFP_NOWARN;
> +				}
> +			} while (1);
> +
> +			folio_start = folio_pgoff(folio);
> +			folio_end = folio_start + folio_nr_pages(folio) - 1;
> +		}
> +
> +		folio_page_index = i - folio_start;
> +		if (WARN_ON_ONCE(folio_page_index >= folio_nr_pages(folio))) {
> +			ret = -EINVAL;
> +			folio_put(folio);
> +			goto err_sg;
> +		}
>  
>  		nr_pages = min_array(((unsigned long[]) {
> -					folio_nr_pages(folio),
> +					folio_nr_pages(folio) - folio_page_index,
>  					page_count - i,
> -					max_segment / PAGE_SIZE,
> +					max_t(unsigned int, 1, max_segment / PAGE_SIZE),

Why?  This function is never called with max_segment less than PAGE_SIZE, 
then max_segment / PAGE_SIZE can't drop to 0.  If you want to address the 
unexpected 0 case then I think we should just validate max_segment before 
using it.

>  				      }), 3);
>  
>  		if (!i ||
>  		    sg->length >= max_segment ||
> -		    folio_pfn(folio) != next_pfn) {
> +		    folio_pfn(folio) + folio_page_index != next_pfn) {
>  			if (i)
>  				sg = sg_next(sg);
>  
>  			st->nents++;
> -			sg_set_folio(sg, folio, nr_pages * PAGE_SIZE, 0);
> +			sg_set_page(sg, folio_page(folio, folio_page_index),
> +				    nr_pages * PAGE_SIZE, 0);
>  		} else {
>  			nr_pages = min_t(unsigned long, nr_pages,
> -					 (max_segment - sg->length) / PAGE_SIZE);
> +					 max_t(unsigned long, 1,
> +					       (max_segment - sg->length) / PAGE_SIZE));

The same as above, we may exepect max_segment not less than PAGE_SIZE.

>  
>  			sg->length += nr_pages * PAGE_SIZE;

The only case for appending more pages to a not yet full scatterlist I can 
imagine is when first page of next folio is next to the last page of a 
previous folio assigned here before so contiguity of pages can be 
preserved.  Then, I think the above if conditions should better reflect 
that only case for clarity.

Thanks,
Janusz

>  		}
> -		next_pfn = folio_pfn(folio) + nr_pages;
> +
> +		next_pfn = folio_pfn(folio) + folio_page_index + nr_pages;
>  		i += nr_pages - 1;
>  
>  		/* Check that the i965g/gm workaround works. */
> @@ -186,6 +205,7 @@ int shmem_sg_alloc_table(struct drm_i915_private *i915, struct sg_table *st,
>  	i915_sg_trim(st);
>  
>  	return 0;
> +
>  err_sg:
>  	sg_mark_end(sg);
>  	if (sg != st->sgl) {

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

* Re: [PATCH v3 3/5] drm/i915/gem: Pull out size validation into a separate function
  2026-07-13  9:58 ` [PATCH v3 3/5] drm/i915/gem: Pull out size validation into a separate function Krzysztof Karas
@ 2026-07-15 15:21   ` Janusz Krzysztofik
  2026-07-20  8:10     ` Krzysztof Karas
  0 siblings, 1 reply; 24+ messages in thread
From: Janusz Krzysztofik @ 2026-07-15 15:21 UTC (permalink / raw)
  To: Krzysztof Karas, intel-gfx, dri-devel, iommu
  Cc: Andi Shyti, Robin Murphy, Jason Gunthorpe, Michał Grzelak,
	Sebastian Brzezinka, Krzysztof Niemiec

Hi Krzysztof,

On Mon, 2026-07-13 at 09:58 +0000, Krzysztof Karas wrote:
> shmem_sg_alloc_table is a very large and hard to read function,
> so reduce the number of operations it is responsible for by
> placing "size" validation in a new helper.
> 
> Signed-off-by: Krzysztof Karas <krzysztof.karas@intel.com>
> ---
> v3:
>  * Split refactoring and put it after the fix in shmem folio
>   counting suggested by Andi.
> 
>  drivers/gpu/drm/i915/gem/i915_gem_shmem.c | 29 ++++++++++++++++-------
>  1 file changed, 20 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
> index 0011d76f5b8c..4a61b012fb6f 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
> @@ -62,6 +62,22 @@ void shmem_sg_free_table(struct sg_table *st, struct address_space *mapping,
>  	sg_free_table(st);
>  }
>  
> +static int validate_size(size_t size, unsigned int page_count,
> +			 struct intel_memory_region *mr)
> +{
> +	if (overflows_type(size / PAGE_SIZE, page_count))
> +		return -E2BIG;
> +
> +	/*
> +	 * If there's no chance of allocating enough pages for the whole
> +	 * object, bail early.
> +	 */
> +	if (size > resource_size(&mr->region))
> +		return -ENOMEM;
> +
> +	return 0;
> +}
> +
>  int shmem_sg_alloc_table(struct drm_i915_private *i915, struct sg_table *st,
>  			 size_t size, struct intel_memory_region *mr,
>  			 struct address_space *mapping,
> @@ -77,16 +93,11 @@ int shmem_sg_alloc_table(struct drm_i915_private *i915, struct sg_table *st,
>  	unsigned long i;
>  	int ret;
>  
> -	if (overflows_type(size / PAGE_SIZE, page_count))
> -		return -E2BIG;
> -
>  	page_count = size / PAGE_SIZE;

Verifying if page_count can accommodate a result before assigning that
result to it looked more correctly to me.  Since overflows_type() doesn't
look at the variable's value, only its type, I think you could postpone 
page_count initialization and pass its pointer to your helper to preserve 
that more reasonable order of operations.

Thanks,
Janusz

> -	/*
> -	 * If there's no chance of allocating enough pages for the whole
> -	 * object, bail early.
> -	 */
> -	if (size > resource_size(&mr->region))
> -		return -ENOMEM;
> +
> +	ret = validate_size(size, page_count, mr);
> +	if (ret < 0)
> +		return ret;
>  
>  	if (sg_alloc_table(st, page_count, GFP_KERNEL | __GFP_NOWARN))
>  		return -ENOMEM;

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

* Re: [PATCH v3 4/5] drm/i915/gem: Read and shrink memory in a separate function
  2026-07-13  9:58 ` [PATCH v3 4/5] drm/i915/gem: Read and shrink memory in " Krzysztof Karas
  2026-07-13 10:10   ` sashiko-bot
@ 2026-07-15 15:31   ` Janusz Krzysztofik
  2026-07-20  8:18     ` Krzysztof Karas
  1 sibling, 1 reply; 24+ messages in thread
From: Janusz Krzysztofik @ 2026-07-15 15:31 UTC (permalink / raw)
  To: Krzysztof Karas, intel-gfx, dri-devel, iommu
  Cc: Andi Shyti, Robin Murphy, Jason Gunthorpe, Michał Grzelak,
	Sebastian Brzezinka, Krzysztof Niemiec

On Mon, 2026-07-13 at 09:58 +0000, Krzysztof Karas wrote:
> Continue unloading shmem_sg_alloc_table by placing reading
> folios and shrink call into a new helper.
> Make the loop a bit more reader-friendly by removing iteration
> over a structure and replacing it with a do-while loop.
> 
> Signed-off-by: Krzysztof Karas <krzysztof.karas@intel.com>
> ---
> v3:
>  * Split refactoring and put it after the fix in shmem folio
>   counting suggested by Andi.
>  * Use do-while loop suggested by Robin. 
> 
>  drivers/gpu/drm/i915/gem/i915_gem_shmem.c | 102 ++++++++++++----------
>  1 file changed, 55 insertions(+), 47 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
> index 4a61b012fb6f..7c8de8fe0a22 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
> @@ -78,6 +78,55 @@ static int validate_size(size_t size, unsigned int page_count,
>  	return 0;
>  }
>  
> +static struct folio *shmem_shrink_get_folio(struct address_space *mapping,
> +					    unsigned long folio_index,
> +					    gfp_t gfp, unsigned int page_count,
> +					    struct drm_i915_private *i915)
> +{
> +	struct folio *folio = NULL;
> +	unsigned int retries = 2;
> +
> +	do {
> +		cond_resched();
> +		folio = shmem_read_folio_gfp(mapping, folio_index, gfp);
> +		if (IS_ERR(folio)) {

Going again through then unused shrinking and modification of gfp doesn't 
make sense, I believe.  Could be avoided based on retries value as an 
additional condition.

Thanks,
Janusz


> +			i915_gem_shrink(NULL, i915, 2 * page_count, NULL,
> +					I915_SHRINK_BOUND | I915_SHRINK_UNBOUND);
> +
> +			/*
> +			 * We've tried hard to allocate the memory by reaping
> +			 * our own buffer, now let the real VM do its job and
> +			 * go down in flames if truly OOM.
> +			 *
> +			 * However, since graphics tend to be disposable,
> +			 * defer the oom here by reporting the ENOMEM back
> +			 * to userspace.
> +			 *
> +			 * Reclaim and warn, but no oom.
> +			 */
> +			gfp = mapping_gfp_mask(mapping);
> +
> +			/*
> +			 * Our bo are always dirty and so we require
> +			 * kswapd to reclaim our pages (direct reclaim
> +			 * does not effectively begin pageout of our
> +			 * buffers on its own). However, direct reclaim
> +			 * only waits for kswapd when under allocation
> +			 * congestion. So as a result __GFP_RECLAIM is
> +			 * unreliable and fails to actually reclaim our
> +			 * dirty pages -- unless you try over and over
> +			 * again with !__GFP_NORETRY. However, we still
> +			 * want to fail this allocation rather than
> +			 * trigger the out-of-memory killer and for
> +			 * this we want __GFP_RETRY_MAYFAIL.
> +			 */
> +			gfp |= __GFP_RETRY_MAYFAIL | __GFP_NOWARN;
> +		}
> +	} while (IS_ERR(folio) && --retries);
> +
> +	return folio;
> +}
> +
>  int shmem_sg_alloc_table(struct drm_i915_private *i915, struct sg_table *st,
>  			 size_t size, struct intel_memory_region *mr,
>  			 struct address_space *mapping,
> @@ -117,57 +166,16 @@ int shmem_sg_alloc_table(struct drm_i915_private *i915, struct sg_table *st,
>  	for (i = 0; i < page_count; i++) {
>  		unsigned long folio_page_index = 0;
>  		unsigned long nr_pages;
> -		const unsigned int shrink[] = {
> -			I915_SHRINK_BOUND | I915_SHRINK_UNBOUND,
> -			0,
> -		}, *s = shrink;
>  		gfp_t gfp = noreclaim;
>  
>  		/* Grab the next folio if we exhausted the current one. */
>  		if (!i || i > folio_end) {
> -			do {
> -				cond_resched();
> -				folio = shmem_read_folio_gfp(mapping, i, gfp);
> -				if (!IS_ERR(folio))
> -					break;
> -
> -				if (!*s) {
> -					ret = PTR_ERR(folio);
> -					goto err_sg;
> -				}
> -
> -				i915_gem_shrink(NULL, i915, 2 * page_count, NULL, *s++);
> -
> -				/*
> -				* We've tried hard to allocate the memory by reaping
> -				* our own buffer, now let the real VM do its job and
> -				* go down in flames if truly OOM.
> -				*
> -				* However, since graphics tend to be disposable,
> -				* defer the oom here by reporting the ENOMEM back
> -				* to userspace.
> -				*/
> -				if (!*s) {
> -					/* reclaim and warn, but no oom */
> -					gfp = mapping_gfp_mask(mapping);
> -
> -					/*
> -					 * Our bo are always dirty and so we require
> -					 * kswapd to reclaim our pages (direct reclaim
> -					 * does not effectively begin pageout of our
> -					 * buffers on its own). However, direct reclaim
> -					 * only waits for kswapd when under allocation
> -					 * congestion. So as a result __GFP_RECLAIM is
> -					 * unreliable and fails to actually reclaim our
> -					 * dirty pages -- unless you try over and over
> -					 * again with !__GFP_NORETRY. However, we still
> -					 * want to fail this allocation rather than
> -					 * trigger the out-of-memory killer and for
> -					 * this we want __GFP_RETRY_MAYFAIL.
> -					 */
> -					gfp |= __GFP_RETRY_MAYFAIL | __GFP_NOWARN;
> -				}
> -			} while (1);
> +			folio = shmem_shrink_get_folio(mapping, i, gfp,
> +						       page_count, i915);
> +			if (IS_ERR(folio)) {
> +				ret = PTR_ERR(folio);
> +				goto err_sg;
> +			}
>  
>  			folio_start = folio_pgoff(folio);
>  			folio_end = folio_start + folio_nr_pages(folio) - 1;

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

* Re: [PATCH v3 5/5] drm/i915/gem: Remove iterator and use while loop
  2026-07-13  9:58 ` [PATCH v3 5/5] drm/i915/gem: Remove iterator and use while loop Krzysztof Karas
  2026-07-13 10:09   ` sashiko-bot
@ 2026-07-15 17:04   ` Janusz Krzysztofik
  2026-07-20  8:25     ` Krzysztof Karas
  1 sibling, 1 reply; 24+ messages in thread
From: Janusz Krzysztofik @ 2026-07-15 17:04 UTC (permalink / raw)
  To: Krzysztof Karas, intel-gfx, dri-devel, iommu
  Cc: Andi Shyti, Robin Murphy, Jason Gunthorpe, Michał Grzelak,
	Sebastian Brzezinka, Krzysztof Niemiec

Hi Krzysztof,

On Mon, 2026-07-13 at 09:58 +0000, Krzysztof Karas wrote:
> Change the main "for" loop into "while" to get rid of obscure
> iterator "i" and use more descriptive name to indicate how many
> pages were already covered. Detect first loop with st->nents and
> put instructions for that case in their own block for easier
> reading.
> 
> Signed-off-by: Krzysztof Karas <krzysztof.karas@intel.com>
> ---
> v3:
>  * Split refactoring and put it after the fix in shmem folio
>   counting suggested by Andi.
> 
>  drivers/gpu/drm/i915/gem/i915_gem_shmem.c | 29 +++++++++++------------
>  1 file changed, 14 insertions(+), 15 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
> index 7c8de8fe0a22..66d0f8f6ffcc 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
> @@ -135,11 +135,11 @@ int shmem_sg_alloc_table(struct drm_i915_private *i915, struct sg_table *st,
>  	unsigned int page_count; /* restricted by sg_alloc_table */
>  	unsigned long next_pfn = 0; /* suppress gcc warning */
>  	unsigned long folio_start = 0;
> +	unsigned long pages_done = 0;
>  	unsigned long folio_end = 0;
>  	struct folio *folio = NULL;
>  	struct scatterlist *sg;
>  	gfp_t noreclaim;
> -	unsigned long i;
>  	int ret;
>  
>  	page_count = size / PAGE_SIZE;
> @@ -163,15 +163,15 @@ int shmem_sg_alloc_table(struct drm_i915_private *i915, struct sg_table *st,
>  
>  	sg = st->sgl;
>  	st->nents = 0;
> -	for (i = 0; i < page_count; i++) {
> +	while (pages_done < page_count) {
>  		unsigned long folio_page_index = 0;
>  		unsigned long nr_pages;
>  		gfp_t gfp = noreclaim;
>  
>  		/* Grab the next folio if we exhausted the current one. */
> -		if (!i || i > folio_end) {
> -			folio = shmem_shrink_get_folio(mapping, i, gfp,
> -						       page_count, i915);
> +		if (!pages_done || pages_done > folio_end) {
> +			folio = shmem_shrink_get_folio(mapping, pages_done, gfp,
> +						       page_count - pages_done, i915);
>  			if (IS_ERR(folio)) {
>  				ret = PTR_ERR(folio);
>  				goto err_sg;
> @@ -181,7 +181,7 @@ int shmem_sg_alloc_table(struct drm_i915_private *i915, struct sg_table *st,
>  			folio_end = folio_start + folio_nr_pages(folio) - 1;
>  		}
>  
> -		folio_page_index = i - folio_start;
> +		folio_page_index = pages_done - folio_start;
>  		if (WARN_ON_ONCE(folio_page_index >= folio_nr_pages(folio))) {
>  			ret = -EINVAL;
>  			folio_put(folio);
> @@ -190,16 +190,15 @@ int shmem_sg_alloc_table(struct drm_i915_private *i915, struct sg_table *st,
>  
>  		nr_pages = min_array(((unsigned long[]) {
>  					folio_nr_pages(folio) - folio_page_index,
> -					page_count - i,
> +					page_count - pages_done,
>  					max_t(unsigned int, 1, max_segment / PAGE_SIZE),
>  				      }), 3);
> -
> -		if (!i ||
> -		    sg->length >= max_segment ||
> -		    folio_pfn(folio) + folio_page_index != next_pfn) {
> -			if (i)
> -				sg = sg_next(sg);
> -
> +		if (!st->nents) {
> +			st->nents++;
> +			sg_set_page(sg, folio_page(folio, 0), nr_pages * PAGE_SIZE, 0);
> +		} else if (sg->length >= max_segment ||
> +			   folio_pfn(folio) + folio_page_index != next_pfn) {
> +			sg = sg_next(sg);

Repeating two or three lines of code to avoid calling another one 
conditionally doesn't look optimal to me.  Maybe you could invent a simple 
replacement of that 'if (i)' conditional expression.

Thanks,
Janusz

>  			st->nents++;
>  			sg_set_page(sg, folio_page(folio, folio_page_index),
>  				    nr_pages * PAGE_SIZE, 0);
> @@ -212,7 +211,7 @@ int shmem_sg_alloc_table(struct drm_i915_private *i915, struct sg_table *st,
>  		}
>  
>  		next_pfn = folio_pfn(folio) + folio_page_index + nr_pages;
> -		i += nr_pages - 1;
> +		pages_done += nr_pages;
>  
>  		/* Check that the i965g/gm workaround works. */
>  		GEM_BUG_ON(gfp & __GFP_DMA32 && next_pfn >= 0x00100000UL);

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

* Re: [PATCH v3 2/5] iommu/dma: Catch scatterlist length overflows
  2026-07-13  9:58 ` [PATCH v3 2/5] iommu/dma: Catch scatterlist length overflows Krzysztof Karas
  2026-07-13 10:13   ` sashiko-bot
@ 2026-07-16 12:39   ` Andi Shyti
  2026-07-16 13:48   ` Robin Murphy
  2 siblings, 0 replies; 24+ messages in thread
From: Andi Shyti @ 2026-07-16 12:39 UTC (permalink / raw)
  To: Krzysztof Karas
  Cc: intel-gfx, dri-devel, iommu, Andi Shyti, Robin Murphy,
	Jason Gunthorpe, Michał Grzelak, Janusz Krzysztofik,
	Sebastian Brzezinka, Krzysztof Niemiec

Jason, Robin? Any comment here?

Thanks,
Andi

On Mon, Jul 13, 2026 at 09:58:09AM +0000, Krzysztof Karas wrote:
> It is possible, when a very large mapping uses only one
> scatterlist, that padding overflows scatterlist's length field.
> This results in:
>  1) silently wrapping the value
>  2) smaller than desired mappings produced by iommu_map_sg
>  3) leaving mapped bytes in memory (no iommu_unmap)
> 
> Address this issue by adding overflow detection for scatterlist
> length field.
> 
> Fixes: 809eac54cdd6 ("iommu/dma: Implement scatterlist segment merging")
> Signed-off-by: Krzysztof Karas <krzysztof.karas@intel.com>
> ---
> v3:
>  * Used check_add_overflow suggested by Jason.
> 
> I decided not to include previous r-bs due to the change in the
> core of this patch: overflows_type -> check_add_overflow and I
> obvserved some folks have heavy preference for one or the other.
> 
>  drivers/iommu/dma-iommu.c | 13 ++++++++++++-
>  1 file changed, 12 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c
> index 381b60d9e7ce..1a36fd9bf10b 100644
> --- a/drivers/iommu/dma-iommu.c
> +++ b/drivers/iommu/dma-iommu.c
> @@ -1493,7 +1493,18 @@ int iommu_dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
>  		 *   time through here (i.e. before it has a meaningful value).
>  		 */
>  		if (pad_len && pad_len < s_length - 1) {
> -			prev->length += pad_len;
> +			unsigned int new_pad_len;
> +			/*
> +			 * For large mappings spanning multiple GBs we
> +			 * may not be able to fit all needed padding into
> +			 * sg->length.
> +			 */
> +			if (check_add_overflow(prev->length, pad_len, &new_pad_len)) {
> +				ret = -EOVERFLOW;
> +				goto out_restore_sg;
> +			}
> +
> +			prev->length = new_pad_len;
>  			iova_len += pad_len;
>  		}
>  
> -- 
> 2.34.1
> 

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

* Re: [PATCH v3 2/5] iommu/dma: Catch scatterlist length overflows
  2026-07-13  9:58 ` [PATCH v3 2/5] iommu/dma: Catch scatterlist length overflows Krzysztof Karas
  2026-07-13 10:13   ` sashiko-bot
  2026-07-16 12:39   ` Andi Shyti
@ 2026-07-16 13:48   ` Robin Murphy
  2026-07-20  7:46     ` Krzysztof Karas
  2 siblings, 1 reply; 24+ messages in thread
From: Robin Murphy @ 2026-07-16 13:48 UTC (permalink / raw)
  To: Krzysztof Karas, intel-gfx, dri-devel, iommu
  Cc: Andi Shyti, Jason Gunthorpe, Michał Grzelak,
	Janusz Krzysztofik, Sebastian Brzezinka, Krzysztof Niemiec

On 13/07/2026 10:58 am, Krzysztof Karas wrote:
> It is possible, when a very large mapping uses only one
> scatterlist, that padding overflows scatterlist's length field.
> This results in:
>   1) silently wrapping the value
>   2) smaller than desired mappings produced by iommu_map_sg
>   3) leaving mapped bytes in memory (no iommu_unmap)
> 
> Address this issue by adding overflow detection for scatterlist
> length field.
> 
> Fixes: 809eac54cdd6 ("iommu/dma: Implement scatterlist segment merging")
> Signed-off-by: Krzysztof Karas <krzysztof.karas@intel.com>
> ---
> v3:
>   * Used check_add_overflow suggested by Jason.
> 
> I decided not to include previous r-bs due to the change in the
> core of this patch: overflows_type -> check_add_overflow and I
> obvserved some folks have heavy preference for one or the other.
> 
>   drivers/iommu/dma-iommu.c | 13 ++++++++++++-
>   1 file changed, 12 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c
> index 381b60d9e7ce..1a36fd9bf10b 100644
> --- a/drivers/iommu/dma-iommu.c
> +++ b/drivers/iommu/dma-iommu.c
> @@ -1493,7 +1493,18 @@ int iommu_dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
>   		 *   time through here (i.e. before it has a meaningful value).
>   		 */

Sorry to be a pain, but since we *have* now spent the time reasoning 
through the details, for completeness I think it would be worth also 
explicitly checking "s_length & UINT_MAX != 0" (or equivalent) after the 
the prior iova_align() - since that's only rounding up an unsigned int 
value to a power of 2 it can't arbitrarily overflow like the addition 
below, but it could still wrap to zero in the assignment to s->length, 
or indeed in the size_t itself on 32-bit.

>   		if (pad_len && pad_len < s_length - 1) {
> -			prev->length += pad_len;
> +			unsigned int new_pad_len;

Super-nit: "pad_len" is the amount of potential padding from the end of 
the previous segment up to the next segment boundary; the value we're 
calculating here is the updated *total* segment length, so 
"new_prev_len" would be more accurate and a bit clearer - the logic here 
is fiddly enough as it is, so every little helps :)

With those tweaks (since it sounds like there's still another respin or 
two to go for the rest of the series anyway),

Reviewed-by: Robin Murphy <robin.murphy@arm.com>

Cheers,
Robin.

> +			/*
> +			 * For large mappings spanning multiple GBs we
> +			 * may not be able to fit all needed padding into
> +			 * sg->length.
> +			 */
> +			if (check_add_overflow(prev->length, pad_len, &new_pad_len)) {
> +				ret = -EOVERFLOW;
> +				goto out_restore_sg;
> +			}
> +
> +			prev->length = new_pad_len;
>   			iova_len += pad_len;
>   		}
>   


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

* Re: [PATCH v3 2/5] iommu/dma: Catch scatterlist length overflows
  2026-07-16 13:48   ` Robin Murphy
@ 2026-07-20  7:46     ` Krzysztof Karas
  0 siblings, 0 replies; 24+ messages in thread
From: Krzysztof Karas @ 2026-07-20  7:46 UTC (permalink / raw)
  To: Robin Murphy
  Cc: intel-gfx, dri-devel, iommu, Andi Shyti, Jason Gunthorpe,
	Michał Grzelak, Janusz Krzysztofik, Sebastian Brzezinka,
	Krzysztof Niemiec

Hi Robin,

On 2026-07-16 at 14:48:25 +0100, Robin Murphy wrote:
> On 13/07/2026 10:58 am, Krzysztof Karas wrote:
> > It is possible, when a very large mapping uses only one
> > scatterlist, that padding overflows scatterlist's length field.
> > This results in:
> >   1) silently wrapping the value
> >   2) smaller than desired mappings produced by iommu_map_sg
> >   3) leaving mapped bytes in memory (no iommu_unmap)
> > 
> > Address this issue by adding overflow detection for scatterlist
> > length field.
> > 
> > Fixes: 809eac54cdd6 ("iommu/dma: Implement scatterlist segment merging")
> > Signed-off-by: Krzysztof Karas <krzysztof.karas@intel.com>
> > ---
> > v3:
> >   * Used check_add_overflow suggested by Jason.
> > 
> > I decided not to include previous r-bs due to the change in the
> > core of this patch: overflows_type -> check_add_overflow and I
> > obvserved some folks have heavy preference for one or the other.
> > 
> >   drivers/iommu/dma-iommu.c | 13 ++++++++++++-
> >   1 file changed, 12 insertions(+), 1 deletion(-)
> > 
> > diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c
> > index 381b60d9e7ce..1a36fd9bf10b 100644
> > --- a/drivers/iommu/dma-iommu.c
> > +++ b/drivers/iommu/dma-iommu.c
> > @@ -1493,7 +1493,18 @@ int iommu_dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
> >   		 *   time through here (i.e. before it has a meaningful value).
> >   		 */
> 
> Sorry to be a pain,
Don't be! I'm glad you got some time to look at this again and
being a pain is what gives us quality code.

> but since we *have* now spent the time reasoning through
> the details, for completeness I think it would be worth also explicitly
> checking "s_length & UINT_MAX != 0" (or equivalent) after the the prior
> iova_align() - since that's only rounding up an unsigned int value to a
> power of 2 it can't arbitrarily overflow like the addition below, but it
> could still wrap to zero in the assignment to s->length, or indeed in the
> size_t itself on 32-bit.
> 
> >   		if (pad_len && pad_len < s_length - 1) {
> > -			prev->length += pad_len;
> > +			unsigned int new_pad_len;
> 
> Super-nit: "pad_len" is the amount of potential padding from the end of the
> previous segment up to the next segment boundary; the value we're
> calculating here is the updated *total* segment length, so "new_prev_len"
> would be more accurate and a bit clearer - the logic here is fiddly enough
> as it is, so every little helps :)
Both suggestions sound reasonable, I'll include them in the next
version then.
> 
> With those tweaks (since it sounds like there's still another respin or two
> to go for the rest of the series anyway),
> 
> Reviewed-by: Robin Murphy <robin.murphy@arm.com>
Thanks!

-- 
Best Regards,
Krzysztof

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

* Re: [PATCH v3 1/5] drm/i915/gem: Count mapped pages in a folio
  2026-07-15 11:18   ` Janusz Krzysztofik
@ 2026-07-20  8:08     ` Krzysztof Karas
  0 siblings, 0 replies; 24+ messages in thread
From: Krzysztof Karas @ 2026-07-20  8:08 UTC (permalink / raw)
  To: Janusz Krzysztofik
  Cc: intel-gfx, dri-devel, iommu, Andi Shyti, Robin Murphy,
	Jason Gunthorpe, Michał Grzelak, Sebastian Brzezinka,
	Krzysztof Niemiec

Hi Janusz,

On 2026-07-15 at 13:18:21 +0200, Janusz Krzysztofik wrote:
> Hi Krzysztof,
> 
> Since reading your commit description I was not really able to understand
> what the issue you were trying to fix was about, I'm providing some 
> comments based on my understanding of the issue.
> 
> On Mon, 2026-07-13 at 09:58 +0000, Krzysztof Karas wrote:
> > With addition of commit 029ae067431a
> > ("drm/i915: Fix potential overflow of shmem scatterlist length")
> > max_segment size was included in calculating a number of pages
> > for the scatterlist. This meant that segment sizes considerably
> > smaller than number of pages in a folio (see shmem_get_pages(),
> > rebuild_st label for context), 
> 
> Two values of max_segment only could and still can be expected, either 
> maximum capacity of a scatterlist, or PAGE_SIZE.  Before the blamed 
> commit, that argument was mostly (unintentionally?) not respected when 
> allocating pages from a folio to a scatterlist.  IOW, complete folios were 
> always allocated, possibly overloading the scatterlist capacity,  
> virtually never limited to PAGE_SIZE when requested via max_segment.
> 
> The blamed commit took care of scatterlist overloading, and
> unintentionally also of respecting the max_segment == PAGE_SIZE case, by 
> limiting the number of folio pages allocated to a single scatterlist not
> to exceed max_segment, but failed to take care of correctly allocating 
> remaining pages from folios larger than max_segment.  That's what this 
> commit description should tell us about, I believe.
> 
> > were not enough to jump to the
> > next folio, which has never been a problem before folios have
> > been intoduced. In result, sg_set_folio() was called multiple
> > times with nr_pages smaller than folio size, using multitude of
> > scatterlists, 
> 
> I don't think it matters how many times sg_set_folio() was called or how 
> many scatterlists were used, since we may expect them to be huge when 
> shmem_sg_alloc_table() is called  with max_segment == PAGE_SIZE.
> 
> > all pointing to the beginning pages of the folio
> > and never fully covering its range of pages.
> 
> Yeah, that's the real issue.  An offset within a folio should be tracked
> and used when allocating pages still left in the folio.
> 
> > Track how many pages have already been counted in a folio
> 
> ... and use that number as an offset on consecutive allocations from the 
> same folio ...
Hmm, very well, sounds reasonable.

> 
> > to ensure it is fully covered before reading next folio.
> 
> > Fixes: 029ae067431a ("drm/i915: Fix potential overflow of shmem scatterlist length")
> > Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/work_items/15816
> > Signed-off-by: Krzysztof Karas <krzysztof.karas@intel.com>
> > ---

[...]

> > +		folio_page_index = i - folio_start;
> > +		if (WARN_ON_ONCE(folio_page_index >= folio_nr_pages(folio))) {
> > +			ret = -EINVAL;
> > +			folio_put(folio);
> > +			goto err_sg;
> > +		}
> >  
> >  		nr_pages = min_array(((unsigned long[]) {
> > -					folio_nr_pages(folio),
> > +					folio_nr_pages(folio) - folio_page_index,
> >  					page_count - i,
> > -					max_segment / PAGE_SIZE,
> > +					max_t(unsigned int, 1, max_segment / PAGE_SIZE),
> 
> Why?  This function is never called with max_segment less than PAGE_SIZE, 
> then max_segment / PAGE_SIZE can't drop to 0.  If you want to address the 
> unexpected 0 case then I think we should just validate max_segment before 
> using it.
I do not recall why exactly I added that check here. I think
validating max_segment earlier is more visible, so I'll do as
you suggest.

> 
> >  				      }), 3);
> >  
> >  		if (!i ||
> >  		    sg->length >= max_segment ||
> > -		    folio_pfn(folio) != next_pfn) {
> > +		    folio_pfn(folio) + folio_page_index != next_pfn) {
> >  			if (i)
> >  				sg = sg_next(sg);
> >  
> >  			st->nents++;
> > -			sg_set_folio(sg, folio, nr_pages * PAGE_SIZE, 0);
> > +			sg_set_page(sg, folio_page(folio, folio_page_index),
> > +				    nr_pages * PAGE_SIZE, 0);
> >  		} else {
> >  			nr_pages = min_t(unsigned long, nr_pages,
> > -					 (max_segment - sg->length) / PAGE_SIZE);
> > +					 max_t(unsigned long, 1,
> > +					       (max_segment - sg->length) / PAGE_SIZE));
> 
> The same as above, we may exepect max_segment not less than PAGE_SIZE.
Yup, got it.

> 
> >  
> >  			sg->length += nr_pages * PAGE_SIZE;
> 
> The only case for appending more pages to a not yet full scatterlist I can 
> imagine is when first page of next folio is next to the last page of a 
> previous folio assigned here before so contiguity of pages can be 
> preserved.  Then, I think the above if conditions should better reflect 
> that only case for clarity.
I think what we are missing here is the assumption that folios
are placed one after another, on which we base next_pfn
calculations. If that assumption is wrong and next_pfn is not
the address of the next folio, then we land in the "if" instead
of "else" block.

In any case, I'll add this info in the next version, either via
modifying the if conditions or adding a comment here.

Thansk for looking at this!

-- 
Best Regards,
Krzysztof

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

* Re: [PATCH v3 3/5] drm/i915/gem: Pull out size validation into a separate function
  2026-07-15 15:21   ` Janusz Krzysztofik
@ 2026-07-20  8:10     ` Krzysztof Karas
  0 siblings, 0 replies; 24+ messages in thread
From: Krzysztof Karas @ 2026-07-20  8:10 UTC (permalink / raw)
  To: Janusz Krzysztofik
  Cc: intel-gfx, dri-devel, iommu, Andi Shyti, Robin Murphy,
	Jason Gunthorpe, Michał Grzelak, Sebastian Brzezinka,
	Krzysztof Niemiec

Hi Janusz,

On 2026-07-15 at 17:21:39 +0200, Janusz Krzysztofik wrote:
> Hi Krzysztof,
> 
> On Mon, 2026-07-13 at 09:58 +0000, Krzysztof Karas wrote:
> > shmem_sg_alloc_table is a very large and hard to read function,
> > so reduce the number of operations it is responsible for by
> > placing "size" validation in a new helper.
> > 
> > Signed-off-by: Krzysztof Karas <krzysztof.karas@intel.com>
> > ---
> > v3:
> >  * Split refactoring and put it after the fix in shmem folio
> >   counting suggested by Andi.
> > 
> >  drivers/gpu/drm/i915/gem/i915_gem_shmem.c | 29 ++++++++++++++++-------
> >  1 file changed, 20 insertions(+), 9 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
> > index 0011d76f5b8c..4a61b012fb6f 100644
> > --- a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
> > +++ b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
> > @@ -62,6 +62,22 @@ void shmem_sg_free_table(struct sg_table *st, struct address_space *mapping,
> >  	sg_free_table(st);
> >  }
> >  
> > +static int validate_size(size_t size, unsigned int page_count,
> > +			 struct intel_memory_region *mr)
> > +{
> > +	if (overflows_type(size / PAGE_SIZE, page_count))
> > +		return -E2BIG;
> > +
> > +	/*
> > +	 * If there's no chance of allocating enough pages for the whole
> > +	 * object, bail early.
> > +	 */
> > +	if (size > resource_size(&mr->region))
> > +		return -ENOMEM;
> > +
> > +	return 0;
> > +}
> > +
> >  int shmem_sg_alloc_table(struct drm_i915_private *i915, struct sg_table *st,
> >  			 size_t size, struct intel_memory_region *mr,
> >  			 struct address_space *mapping,
> > @@ -77,16 +93,11 @@ int shmem_sg_alloc_table(struct drm_i915_private *i915, struct sg_table *st,
> >  	unsigned long i;
> >  	int ret;
> >  
> > -	if (overflows_type(size / PAGE_SIZE, page_count))
> > -		return -E2BIG;
> > -
> >  	page_count = size / PAGE_SIZE;
> 
> Verifying if page_count can accommodate a result before assigning that
> result to it looked more correctly to me.  Since overflows_type() doesn't
> look at the variable's value, only its type, I think you could postpone 
> page_count initialization and pass its pointer to your helper to preserve 
> that more reasonable order of operations.
Yeah, you are right, it would make more sense to validate it
before assignment. I'll do that in the next version.

> 
> Thanks,
> Janusz
> 
> > -	/*
> > -	 * If there's no chance of allocating enough pages for the whole
> > -	 * object, bail early.
> > -	 */
> > -	if (size > resource_size(&mr->region))
> > -		return -ENOMEM;
> > +
> > +	ret = validate_size(size, page_count, mr);
> > +	if (ret < 0)
> > +		return ret;
> >  
> >  	if (sg_alloc_table(st, page_count, GFP_KERNEL | __GFP_NOWARN))
> >  		return -ENOMEM;

-- 
Best Regards,
Krzysztof

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

* Re: [PATCH v3 4/5] drm/i915/gem: Read and shrink memory in a separate function
  2026-07-15 15:31   ` Janusz Krzysztofik
@ 2026-07-20  8:18     ` Krzysztof Karas
  2026-07-20 10:15       ` Janusz Krzysztofik
  0 siblings, 1 reply; 24+ messages in thread
From: Krzysztof Karas @ 2026-07-20  8:18 UTC (permalink / raw)
  To: Janusz Krzysztofik
  Cc: intel-gfx, dri-devel, iommu, Andi Shyti, Robin Murphy,
	Jason Gunthorpe, Michał Grzelak, Sebastian Brzezinka,
	Krzysztof Niemiec

Hi Janusz,

On 2026-07-15 at 17:31:56 +0200, Janusz Krzysztofik wrote:
> On Mon, 2026-07-13 at 09:58 +0000, Krzysztof Karas wrote:
> > Continue unloading shmem_sg_alloc_table by placing reading
> > folios and shrink call into a new helper.
> > Make the loop a bit more reader-friendly by removing iteration
> > over a structure and replacing it with a do-while loop.
> > 
> > Signed-off-by: Krzysztof Karas <krzysztof.karas@intel.com>
> > ---
> > v3:
> >  * Split refactoring and put it after the fix in shmem folio
> >   counting suggested by Andi.
> >  * Use do-while loop suggested by Robin. 
> > 
> >  drivers/gpu/drm/i915/gem/i915_gem_shmem.c | 102 ++++++++++++----------
> >  1 file changed, 55 insertions(+), 47 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
> > index 4a61b012fb6f..7c8de8fe0a22 100644
> > --- a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
> > +++ b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
> > @@ -78,6 +78,55 @@ static int validate_size(size_t size, unsigned int page_count,
> >  	return 0;
> >  }
> >  
> > +static struct folio *shmem_shrink_get_folio(struct address_space *mapping,
> > +					    unsigned long folio_index,
> > +					    gfp_t gfp, unsigned int page_count,
> > +					    struct drm_i915_private *i915)
> > +{
> > +	struct folio *folio = NULL;
> > +	unsigned int retries = 2;
> > +
> > +	do {
> > +		cond_resched();
> > +		folio = shmem_read_folio_gfp(mapping, folio_index, gfp);
> > +		if (IS_ERR(folio)) {
> 
> Going again through then unused shrinking and modification of gfp doesn't 
> make sense, I believe.  Could be avoided based on retries value as an 
> additional condition.
If calling i915_gem_shrink again doesn't give us anything, then
looping doesn not really benefit us here. We could do something
like this instead:

folio = shmem_read_folio_gfp(...);
if (IS_ERR(folio)) {
	i915_gem_shrink(...);
	gfp = mapping_gfp_mask(mapping);
	gfp |= __GFP_RETRY_MAYFAIL | __GFP_NOWARN;
	/* again */
	folio = shmem_read_folio_gfp(...);
}

return folio;

That way we'd be explicit about shrinking once and retrying
folio reading only once. Reduced indentation would be added
bonus.

What do you think?

-- 
Best Regards,
Krzysztof

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

* Re: [PATCH v3 5/5] drm/i915/gem: Remove iterator and use while loop
  2026-07-15 17:04   ` Janusz Krzysztofik
@ 2026-07-20  8:25     ` Krzysztof Karas
  2026-07-20 10:19       ` Janusz Krzysztofik
  0 siblings, 1 reply; 24+ messages in thread
From: Krzysztof Karas @ 2026-07-20  8:25 UTC (permalink / raw)
  To: Janusz Krzysztofik
  Cc: intel-gfx, dri-devel, iommu, Andi Shyti, Robin Murphy,
	Jason Gunthorpe, Michał Grzelak, Sebastian Brzezinka,
	Krzysztof Niemiec

Hi Janusz,

On 2026-07-15 at 19:04:42 +0200, Janusz Krzysztofik wrote:
> Hi Krzysztof,
> 
> On Mon, 2026-07-13 at 09:58 +0000, Krzysztof Karas wrote:
> > Change the main "for" loop into "while" to get rid of obscure
> > iterator "i" and use more descriptive name to indicate how many
> > pages were already covered. Detect first loop with st->nents and
> > put instructions for that case in their own block for easier
> > reading.
> > 
> > Signed-off-by: Krzysztof Karas <krzysztof.karas@intel.com>
> > ---
> > v3:
> >  * Split refactoring and put it after the fix in shmem folio
> >   counting suggested by Andi.
> > 
> >  drivers/gpu/drm/i915/gem/i915_gem_shmem.c | 29 +++++++++++------------
> >  1 file changed, 14 insertions(+), 15 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
> > index 7c8de8fe0a22..66d0f8f6ffcc 100644
> > --- a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
> > +++ b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
> > @@ -135,11 +135,11 @@ int shmem_sg_alloc_table(struct drm_i915_private *i915, struct sg_table *st,
> >  	unsigned int page_count; /* restricted by sg_alloc_table */
> >  	unsigned long next_pfn = 0; /* suppress gcc warning */
> >  	unsigned long folio_start = 0;
> > +	unsigned long pages_done = 0;
> >  	unsigned long folio_end = 0;
> >  	struct folio *folio = NULL;
> >  	struct scatterlist *sg;
> >  	gfp_t noreclaim;
> > -	unsigned long i;
> >  	int ret;
> >  
> >  	page_count = size / PAGE_SIZE;
> > @@ -163,15 +163,15 @@ int shmem_sg_alloc_table(struct drm_i915_private *i915, struct sg_table *st,
> >  
> >  	sg = st->sgl;
> >  	st->nents = 0;
> > -	for (i = 0; i < page_count; i++) {
> > +	while (pages_done < page_count) {
> >  		unsigned long folio_page_index = 0;
> >  		unsigned long nr_pages;
> >  		gfp_t gfp = noreclaim;
> >  
> >  		/* Grab the next folio if we exhausted the current one. */
> > -		if (!i || i > folio_end) {
> > -			folio = shmem_shrink_get_folio(mapping, i, gfp,
> > -						       page_count, i915);
> > +		if (!pages_done || pages_done > folio_end) {
> > +			folio = shmem_shrink_get_folio(mapping, pages_done, gfp,
> > +						       page_count - pages_done, i915);
> >  			if (IS_ERR(folio)) {
> >  				ret = PTR_ERR(folio);
> >  				goto err_sg;
> > @@ -181,7 +181,7 @@ int shmem_sg_alloc_table(struct drm_i915_private *i915, struct sg_table *st,
> >  			folio_end = folio_start + folio_nr_pages(folio) - 1;
> >  		}
> >  
> > -		folio_page_index = i - folio_start;
> > +		folio_page_index = pages_done - folio_start;
> >  		if (WARN_ON_ONCE(folio_page_index >= folio_nr_pages(folio))) {
> >  			ret = -EINVAL;
> >  			folio_put(folio);
> > @@ -190,16 +190,15 @@ int shmem_sg_alloc_table(struct drm_i915_private *i915, struct sg_table *st,
> >  
> >  		nr_pages = min_array(((unsigned long[]) {
> >  					folio_nr_pages(folio) - folio_page_index,
> > -					page_count - i,
> > +					page_count - pages_done,
> >  					max_t(unsigned int, 1, max_segment / PAGE_SIZE),
> >  				      }), 3);
> > -
> > -		if (!i ||
> > -		    sg->length >= max_segment ||
> > -		    folio_pfn(folio) + folio_page_index != next_pfn) {
> > -			if (i)
> > -				sg = sg_next(sg);
> > -
> > +		if (!st->nents) {
> > +			st->nents++;
> > +			sg_set_page(sg, folio_page(folio, 0), nr_pages * PAGE_SIZE, 0);
> > +		} else if (sg->length >= max_segment ||
> > +			   folio_pfn(folio) + folio_page_index != next_pfn) {
> > +			sg = sg_next(sg);
> 
> Repeating two or three lines of code to avoid calling another one 
> conditionally doesn't look optimal to me.  Maybe you could invent a simple 
> replacement of that 'if (i)' conditional expression.
Perhaps it is not optimal. I do not feel comfortable having two
conditions that contradict each other in the same block, which
is why I wanted to take out the first iteration setup.

It is more about aesthetics here, so I do not have a strong
argument here besides readability. If that is not enough, then
I'll revert to the previous code.

-- 
Best Regards,
Krzysztof

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

* Re: [PATCH v3 4/5] drm/i915/gem: Read and shrink memory in a separate function
  2026-07-20  8:18     ` Krzysztof Karas
@ 2026-07-20 10:15       ` Janusz Krzysztofik
  0 siblings, 0 replies; 24+ messages in thread
From: Janusz Krzysztofik @ 2026-07-20 10:15 UTC (permalink / raw)
  To: Krzysztof Karas
  Cc: intel-gfx, dri-devel, iommu, Andi Shyti, Robin Murphy,
	Jason Gunthorpe, Michał Grzelak, Sebastian Brzezinka,
	Krzysztof Niemiec

On Mon, 2026-07-20 at 08:18 +0000, Krzysztof Karas wrote:
> Hi Janusz,
> 
> On 2026-07-15 at 17:31:56 +0200, Janusz Krzysztofik wrote:
> > On Mon, 2026-07-13 at 09:58 +0000, Krzysztof Karas wrote:
> > > Continue unloading shmem_sg_alloc_table by placing reading
> > > folios and shrink call into a new helper.
> > > Make the loop a bit more reader-friendly by removing iteration
> > > over a structure and replacing it with a do-while loop.
> > > 
> > > Signed-off-by: Krzysztof Karas <krzysztof.karas@intel.com>
> > > ---
> > > v3:
> > >  * Split refactoring and put it after the fix in shmem folio
> > >   counting suggested by Andi.
> > >  * Use do-while loop suggested by Robin. 
> > > 
> > >  drivers/gpu/drm/i915/gem/i915_gem_shmem.c | 102 ++++++++++++----------
> > >  1 file changed, 55 insertions(+), 47 deletions(-)
> > > 
> > > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
> > > index 4a61b012fb6f..7c8de8fe0a22 100644
> > > --- a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
> > > +++ b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
> > > @@ -78,6 +78,55 @@ static int validate_size(size_t size, unsigned int page_count,
> > >  	return 0;
> > >  }
> > >  
> > > +static struct folio *shmem_shrink_get_folio(struct address_space *mapping,
> > > +					    unsigned long folio_index,
> > > +					    gfp_t gfp, unsigned int page_count,
> > > +					    struct drm_i915_private *i915)
> > > +{
> > > +	struct folio *folio = NULL;
> > > +	unsigned int retries = 2;
> > > +
> > > +	do {
> > > +		cond_resched();
> > > +		folio = shmem_read_folio_gfp(mapping, folio_index, gfp);
> > > +		if (IS_ERR(folio)) {
> > 
> > Going again through then unused shrinking and modification of gfp doesn't 
> > make sense, I believe.  Could be avoided based on retries value as an 
> > additional condition.
> If calling i915_gem_shrink again doesn't give us anything, then
> looping doesn not really benefit us here. We could do something
> like this instead:
> 
> folio = shmem_read_folio_gfp(...);
> if (IS_ERR(folio)) {
> 	i915_gem_shrink(...);
> 	gfp = mapping_gfp_mask(mapping);
> 	gfp |= __GFP_RETRY_MAYFAIL | __GFP_NOWARN;
> 	/* again */
> 	folio = shmem_read_folio_gfp(...);
> }
> 
> return folio;
> 
> That way we'd be explicit about shrinking once and retrying
> folio reading only once. Reduced indentation would be added
> bonus.
> 
> What do you think?

Yes, that would be much more clear.  I would only keep the cond_resched(), 
at least before retrying, unless you can justify its removal.

Thanks,
Janusz

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

* Re: [PATCH v3 5/5] drm/i915/gem: Remove iterator and use while loop
  2026-07-20  8:25     ` Krzysztof Karas
@ 2026-07-20 10:19       ` Janusz Krzysztofik
  0 siblings, 0 replies; 24+ messages in thread
From: Janusz Krzysztofik @ 2026-07-20 10:19 UTC (permalink / raw)
  To: Krzysztof Karas
  Cc: intel-gfx, dri-devel, iommu, Andi Shyti, Robin Murphy,
	Jason Gunthorpe, Michał Grzelak, Sebastian Brzezinka,
	Krzysztof Niemiec

On Mon, 2026-07-20 at 08:25 +0000, Krzysztof Karas wrote:
> Hi Janusz,
> 
> On 2026-07-15 at 19:04:42 +0200, Janusz Krzysztofik wrote:
> > Hi Krzysztof,
> > 
> > On Mon, 2026-07-13 at 09:58 +0000, Krzysztof Karas wrote:
> > > Change the main "for" loop into "while" to get rid of obscure
> > > iterator "i" and use more descriptive name to indicate how many
> > > pages were already covered. Detect first loop with st->nents and
> > > put instructions for that case in their own block for easier
> > > reading.
> > > 
> > > Signed-off-by: Krzysztof Karas <krzysztof.karas@intel.com>
> > > ---
> > > v3:
> > >  * Split refactoring and put it after the fix in shmem folio
> > >   counting suggested by Andi.
> > > 
> > >  drivers/gpu/drm/i915/gem/i915_gem_shmem.c | 29 +++++++++++------------
> > >  1 file changed, 14 insertions(+), 15 deletions(-)
> > > 
> > > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
> > > index 7c8de8fe0a22..66d0f8f6ffcc 100644
> > > --- a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
> > > +++ b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c
> > > @@ -135,11 +135,11 @@ int shmem_sg_alloc_table(struct drm_i915_private *i915, struct sg_table *st,
> > >  	unsigned int page_count; /* restricted by sg_alloc_table */
> > >  	unsigned long next_pfn = 0; /* suppress gcc warning */
> > >  	unsigned long folio_start = 0;
> > > +	unsigned long pages_done = 0;
> > >  	unsigned long folio_end = 0;
> > >  	struct folio *folio = NULL;
> > >  	struct scatterlist *sg;
> > >  	gfp_t noreclaim;
> > > -	unsigned long i;
> > >  	int ret;
> > >  
> > >  	page_count = size / PAGE_SIZE;
> > > @@ -163,15 +163,15 @@ int shmem_sg_alloc_table(struct drm_i915_private *i915, struct sg_table *st,
> > >  
> > >  	sg = st->sgl;
> > >  	st->nents = 0;
> > > -	for (i = 0; i < page_count; i++) {
> > > +	while (pages_done < page_count) {
> > >  		unsigned long folio_page_index = 0;
> > >  		unsigned long nr_pages;
> > >  		gfp_t gfp = noreclaim;
> > >  
> > >  		/* Grab the next folio if we exhausted the current one. */
> > > -		if (!i || i > folio_end) {
> > > -			folio = shmem_shrink_get_folio(mapping, i, gfp,
> > > -						       page_count, i915);
> > > +		if (!pages_done || pages_done > folio_end) {
> > > +			folio = shmem_shrink_get_folio(mapping, pages_done, gfp,
> > > +						       page_count - pages_done, i915);
> > >  			if (IS_ERR(folio)) {
> > >  				ret = PTR_ERR(folio);
> > >  				goto err_sg;
> > > @@ -181,7 +181,7 @@ int shmem_sg_alloc_table(struct drm_i915_private *i915, struct sg_table *st,
> > >  			folio_end = folio_start + folio_nr_pages(folio) - 1;
> > >  		}
> > >  
> > > -		folio_page_index = i - folio_start;
> > > +		folio_page_index = pages_done - folio_start;
> > >  		if (WARN_ON_ONCE(folio_page_index >= folio_nr_pages(folio))) {
> > >  			ret = -EINVAL;
> > >  			folio_put(folio);
> > > @@ -190,16 +190,15 @@ int shmem_sg_alloc_table(struct drm_i915_private *i915, struct sg_table *st,
> > >  
> > >  		nr_pages = min_array(((unsigned long[]) {
> > >  					folio_nr_pages(folio) - folio_page_index,
> > > -					page_count - i,
> > > +					page_count - pages_done,
> > >  					max_t(unsigned int, 1, max_segment / PAGE_SIZE),
> > >  				      }), 3);
> > > -
> > > -		if (!i ||
> > > -		    sg->length >= max_segment ||
> > > -		    folio_pfn(folio) + folio_page_index != next_pfn) {
> > > -			if (i)
> > > -				sg = sg_next(sg);
> > > -
> > > +		if (!st->nents) {
> > > +			st->nents++;
> > > +			sg_set_page(sg, folio_page(folio, 0), nr_pages * PAGE_SIZE, 0);
> > > +		} else if (sg->length >= max_segment ||
> > > +			   folio_pfn(folio) + folio_page_index != next_pfn) {
> > > +			sg = sg_next(sg);
> > 
> > Repeating two or three lines of code to avoid calling another one 
> > conditionally doesn't look optimal to me.  Maybe you could invent a simple 
> > replacement of that 'if (i)' conditional expression.
> Perhaps it is not optimal. I do not feel comfortable having two
> conditions that contradict each other in the same block, which
> is why I wanted to take out the first iteration setup.
> 
> It is more about aesthetics here, so I do not have a strong
> argument here besides readability. If that is not enough, then
> I'll revert to the previous code.

I think that also depends on how you address my comment to your patch 1/5 
on that if condition, so we'll see if this comment will be still 
applicable.

Thanks,
Janusz

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

end of thread, other threads:[~2026-07-20 10:19 UTC | newest]

Thread overview: 24+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-13  9:58 [PATCH v3 0/5] drivers: Improve memory management for large object allocations when i915/shmem is used with iommu Krzysztof Karas
2026-07-13  9:58 ` [PATCH v3 1/5] drm/i915/gem: Count mapped pages in a folio Krzysztof Karas
2026-07-15 11:18   ` Janusz Krzysztofik
2026-07-20  8:08     ` Krzysztof Karas
2026-07-13  9:58 ` [PATCH v3 2/5] iommu/dma: Catch scatterlist length overflows Krzysztof Karas
2026-07-13 10:13   ` sashiko-bot
2026-07-16 12:39   ` Andi Shyti
2026-07-16 13:48   ` Robin Murphy
2026-07-20  7:46     ` Krzysztof Karas
2026-07-13  9:58 ` [PATCH v3 3/5] drm/i915/gem: Pull out size validation into a separate function Krzysztof Karas
2026-07-15 15:21   ` Janusz Krzysztofik
2026-07-20  8:10     ` Krzysztof Karas
2026-07-13  9:58 ` [PATCH v3 4/5] drm/i915/gem: Read and shrink memory in " Krzysztof Karas
2026-07-13 10:10   ` sashiko-bot
2026-07-15 15:31   ` Janusz Krzysztofik
2026-07-20  8:18     ` Krzysztof Karas
2026-07-20 10:15       ` Janusz Krzysztofik
2026-07-13  9:58 ` [PATCH v3 5/5] drm/i915/gem: Remove iterator and use while loop Krzysztof Karas
2026-07-13 10:09   ` sashiko-bot
2026-07-15 17:04   ` Janusz Krzysztofik
2026-07-20  8:25     ` Krzysztof Karas
2026-07-20 10:19       ` Janusz Krzysztofik
2026-07-13 11:01 ` ✓ i915.CI.BAT: success for drivers: Improve memory management for large object allocations when i915/shmem is used with iommu Patchwork
2026-07-13 14:14 ` ✗ i915.CI.Full: failure " Patchwork

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.