All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH i-g-t 00/12] gputop: Add support for xe
@ 2024-04-05  6:00 Lucas De Marchi
  2024-04-05  6:00 ` [PATCH i-g-t 01/12] lib/igt_drm_fdinfo: Stop passing key twice Lucas De Marchi
                   ` (15 more replies)
  0 siblings, 16 replies; 33+ messages in thread
From: Lucas De Marchi @ 2024-04-05  6:00 UTC (permalink / raw)
  To: igt-dev; +Cc: Tvrtko Ursulin, Umesh Nerlige Ramappa, Lucas De Marchi

This contains all the patches I had pending for igt to add support for
gputop for the xe driver. This was added on top of
https://patchwork.freedesktop.org/series/131956/ (Refactors and fixes
for drm_clients). 2 patches from that series are posted again here
with one of those pending review.

I decided to remove the patch "lib/igt_drm_clients: lazy stat process"
to focus on adding the xe support rather than optimizing.

Patches 3-6 are more minor fixes and refactors to prepare for the new
feature.

Patches 7-9 add support for a new "ticks" unit to the libraries when
parsing the fdinfo

Patches 10-11 are minor refactors to gputop

Last patch plumbs the changes together to implement the new way to
calculate the percentage. This is considered an RFC only as I still have
to send the kernel side. It's a good opportunity to see how
we plan to use it, give feedback about the new unit and the
motivation behind it.

WARNING: the only thing tested here is that I didn't break the old
format:  gputop with i915 continues to work for me after these changes.
For the kernel side I have to get some patches prepared by Umesh, add a
few more from me and give some proper rounds of testing.

One thing I noticed is that if we were to just add the new format to
fdinfo, we'd break gputop. That is because gputop was not parsing the
complete line and didn't check the unit. I checked 2 other
implementations I found for gputop-like sw and they didn't have this
problem:

	- nvtop: https://github.com/Syllo/nvtop/blob/master/src/extract_gpuinfo_intel.c
	- htop: https://github.com/htop-dev/htop/blob/main/linux/GPU.c

So I think we may be safe to add the new unit as used here and not break
anything other than our own toy (but fixed in this series).

Lucas De Marchi (12):
  lib/igt_drm_fdinfo: Stop passing key twice
  lib/igt_drm_fdinfo: Remove prefix arg from parse functions
  lib/igt_drm_fdinfo: Fix wrong name len assert
  lib/igt_drm_fdinfo: Assert pdev is not truncated
  lib/igt_drm_fdinfo: Detect invalid drm-client-id
  lib/igt_drm_fdinfo: Stop ignoring space where not needed
  lib/igt_drm_fdinfo: Parse unit for engine utilization
  lib/igt_drm_fdinfo: Store 2 counters for "ticks" unit
  lib/igt_drm_clients: Store second data for ticks busyness
  gputop: Extract method to update console size
  gputop: Extract clrscr()
  RFC: gputop: Add support for ticks unit

 lib/igt_drm_clients.c |  24 ++++--
 lib/igt_drm_clients.h |   3 +
 lib/igt_drm_fdinfo.c  | 185 +++++++++++++++++++++++-------------------
 lib/igt_drm_fdinfo.h  |   7 ++
 tools/gputop.c        |  44 ++++++----
 5 files changed, 162 insertions(+), 101 deletions(-)

-- 
2.44.0


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

* [PATCH i-g-t 01/12] lib/igt_drm_fdinfo: Stop passing key twice
  2024-04-05  6:00 [PATCH i-g-t 00/12] gputop: Add support for xe Lucas De Marchi
@ 2024-04-05  6:00 ` Lucas De Marchi
  2024-04-18 22:14   ` Umesh Nerlige Ramappa
  2024-04-19  7:42   ` Tvrtko Ursulin
  2024-04-05  6:00 ` [PATCH i-g-t 02/12] lib/igt_drm_fdinfo: Remove prefix arg from parse functions Lucas De Marchi
                   ` (14 subsequent siblings)
  15 siblings, 2 replies; 33+ messages in thread
From: Lucas De Marchi @ 2024-04-05  6:00 UTC (permalink / raw)
  To: igt-dev; +Cc: Tvrtko Ursulin, Umesh Nerlige Ramappa, Lucas De Marchi

Change strstartswith() so it also returns the length, which then can be
used inside the branch when it matches. A good compiler shall optimize
out the strlen call since the argument is a constant literal.

With this, the find_kv() is not needed anymore and the difference with
regard the other branches can be summarized with a new ignore_space()
helper and the fact it matches the entire key by appending the ':'. The
helper is added on top of the file so it can be reused later.

Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
 lib/igt_drm_fdinfo.c | 87 +++++++++++++++++++++++---------------------
 1 file changed, 45 insertions(+), 42 deletions(-)

diff --git a/lib/igt_drm_fdinfo.c b/lib/igt_drm_fdinfo.c
index 18dbb5d0b..bfc946f24 100644
--- a/lib/igt_drm_fdinfo.c
+++ b/lib/igt_drm_fdinfo.c
@@ -53,6 +53,14 @@ static size_t read_fdinfo(char *buf, const size_t sz, int at, const char *name)
 	return count > 0 ? count : 0;
 }
 
+static const char *ignore_space(const char *s)
+{
+	for (; *s && isspace(*s); s++)
+		;
+
+	return s;
+}
+
 static int parse_engine(char *line, struct drm_client_fdinfo *info,
 			size_t prefix_len,
 			const char **name_map, unsigned int map_entries,
@@ -104,23 +112,6 @@ static int parse_engine(char *line, struct drm_client_fdinfo *info,
 	return found;
 }
 
-static const char *find_kv(const char *buf, const char *key, size_t keylen)
-{
-	const char *p;
-
-	if (strncmp(buf, key, keylen))
-		return NULL;
-
-	p = buf + keylen;
-	if (*p != ':')
-		return NULL;
-
-	for (p++; *p && isspace(*p); p++)
-		;
-
-	return *p ? p : NULL;
-}
-
 static int parse_region(char *line, struct drm_client_fdinfo *info,
 			size_t prefix_len,
 			const char **region_map, unsigned int region_entries,
@@ -205,6 +196,11 @@ out:
 		}							\
 	} while (0)
 
+#define strstartswith(a, b, plen__) ({					\
+		*plen__ = strlen(b);					\
+		strncmp(a, b, *plen__) == 0;				\
+})
+
 unsigned int
 __igt_parse_drm_fdinfo(int dir, const char *fd, struct drm_client_fdinfo *info,
 		       const char **name_map, unsigned int map_entries,
@@ -222,31 +218,39 @@ __igt_parse_drm_fdinfo(int dir, const char *fd, struct drm_client_fdinfo *info,
 
 	while ((l = strtok_r(_buf, "\n", &ctx))) {
 		uint64_t val = 0;
+		size_t keylen;
 		const char *v;
 		int idx;
 
 		_buf = NULL;
 
-		if ((v = find_kv(l, "drm-driver", strlen("drm-driver")))) {
-			strncpy(info->driver, v, sizeof(info->driver) - 1);
-			good++;
-		}  else if ((v = find_kv(l, "drm-client-id",
-					 strlen("drm-client-id")))) {
-			info->id = atol(v);
-			good++;
-		} else if ((v = find_kv(l, "drm-pdev", strlen("drm-pdev")))) {
-			/* optional */
+		if (strstartswith(l, "drm-driver:", &keylen)) {
+			v = l + keylen;
+			v = ignore_space(v);
+			if (*v) {
+				strncpy(info->driver, v, sizeof(info->driver) - 1);
+				good++;
+			}
+		}  else if (strstartswith(l, "drm-client-id:", &keylen)) {
+			v = l + keylen;
+			v = ignore_space(v);
+			if (*v) {
+				info->id = atol(v);
+				good++;
+			}
+		} else if (strstartswith(l, "drm-pdev:", &keylen)) {
+			v = l + keylen;
+			v = ignore_space(v);
 			strncpy(info->pdev, v, sizeof(info->pdev) - 1);
-		} else if (!strncmp(l, "drm-engine-capacity-", 20)) {
-			idx = parse_engine(l, info,
-					   strlen("drm-engine-capacity-"),
+		} else if (strstartswith(l, "drm-engine-capacity-", &keylen)) {
+			idx = parse_engine(l, info, keylen,
 					   name_map, map_entries, &val);
 			if (idx >= 0) {
 				info->capacity[idx] = val;
 				num_capacity++;
 			}
-		} else if (!strncmp(l, "drm-engine-", 11)) {
-			idx = parse_engine(l, info, strlen("drm-engine-"),
+		} else if (strstartswith(l, "drm-engine-", &keylen)) {
+			idx = parse_engine(l, info, keylen,
 					   name_map, map_entries, &val);
 			if (idx >= 0) {
 				if (!info->capacity[idx])
@@ -256,25 +260,24 @@ __igt_parse_drm_fdinfo(int dir, const char *fd, struct drm_client_fdinfo *info,
 				if (idx > info->last_engine_index)
 					info->last_engine_index = idx;
 			}
-		} else if (!strncmp(l, "drm-total-", 10)) {
-			idx = parse_region(l, info, strlen("drm-total-"),
+		} else if (strstartswith(l, "drm-total-", &keylen)) {
+			idx = parse_region(l, info, keylen,
 					   region_map, region_entries, &val);
 			UPDATE_REGION(idx, total, val);
-		} else if (!strncmp(l, "drm-shared-", 11)) {
-			idx = parse_region(l, info, strlen("drm-shared-"),
+		} else if (strstartswith(l, "drm-shared-", &keylen)) {
+			idx = parse_region(l, info, keylen,
 					   region_map, region_entries, &val);
 			UPDATE_REGION(idx, shared, val);
-
-		} else if (!strncmp(l, "drm-resident-", 13)) {
-			idx = parse_region(l, info, strlen("drm-resident-"),
+		} else if (strstartswith(l, "drm-resident-", &keylen)) {
+			idx = parse_region(l, info, keylen,
 					   region_map, region_entries, &val);
 			UPDATE_REGION(idx, resident, val);
-		} else if (!strncmp(l, "drm-purgeable-", 14)) {
-			idx = parse_region(l, info, strlen("drm-purgeable-"),
+		} else if (strstartswith(l, "drm-purgeable-", &keylen)) {
+			idx = parse_region(l, info, keylen,
 					   region_map, region_entries, &val);
 			UPDATE_REGION(idx, purgeable, val);
-		} else if (!strncmp(l, "drm-active-", 11)) {
-			idx = parse_region(l, info, strlen("drm-active-"),
+		} else if (strstartswith(l, "drm-active-", &keylen)) {
+			idx = parse_region(l, info, keylen,
 					   region_map, region_entries, &val);
 			UPDATE_REGION(idx, active, val);
 		}
-- 
2.44.0


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

* [PATCH i-g-t 02/12] lib/igt_drm_fdinfo: Remove prefix arg from parse functions
  2024-04-05  6:00 [PATCH i-g-t 00/12] gputop: Add support for xe Lucas De Marchi
  2024-04-05  6:00 ` [PATCH i-g-t 01/12] lib/igt_drm_fdinfo: Stop passing key twice Lucas De Marchi
@ 2024-04-05  6:00 ` Lucas De Marchi
  2024-04-05  6:00 ` [PATCH i-g-t 03/12] lib/igt_drm_fdinfo: Fix wrong name len assert Lucas De Marchi
                   ` (13 subsequent siblings)
  15 siblings, 0 replies; 33+ messages in thread
From: Lucas De Marchi @ 2024-04-05  6:00 UTC (permalink / raw)
  To: igt-dev; +Cc: Tvrtko Ursulin, Umesh Nerlige Ramappa, Lucas De Marchi

The prefix is not really needed and __igt_parse_drm_fdinfo()
can simply pass l + keylen as argument which simplifies the parse
functions.

While refactoring this, it also replaces the remaining calls to index()
to use strchr().

Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
 lib/igt_drm_fdinfo.c | 61 ++++++++++++++++++++------------------------
 1 file changed, 28 insertions(+), 33 deletions(-)

diff --git a/lib/igt_drm_fdinfo.c b/lib/igt_drm_fdinfo.c
index bfc946f24..7a9ae94f0 100644
--- a/lib/igt_drm_fdinfo.c
+++ b/lib/igt_drm_fdinfo.c
@@ -61,25 +61,23 @@ static const char *ignore_space(const char *s)
 	return s;
 }
 
-static int parse_engine(char *line, struct drm_client_fdinfo *info,
-			size_t prefix_len,
+static int parse_engine(const char *name, struct drm_client_fdinfo *info,
 			const char **name_map, unsigned int map_entries,
 			uint64_t *val)
 {
-	ssize_t name_len;
-	char *name, *p;
+	const char *p;
+	size_t name_len;
 	int found = -1;
 	unsigned int i;
 
-	p = index(line, ':');
-	if (!p || p == line)
+	p = strchr(name, ':');
+	if (!p)
 		return -1;
 
-	name_len = p - line - prefix_len;
+	name_len = p - name;
 	if (name_len < 1)
 		return -1;
-
-	name = line + prefix_len;
+	p++;
 
 	if (name_map) {
 		for (i = 0; i < map_entries; i++) {
@@ -105,32 +103,30 @@ static int parse_engine(char *line, struct drm_client_fdinfo *info,
 	}
 
 	if (found >= 0) {
-		while (*++p && isspace(*p));
+		p = ignore_space(p);
 		*val = strtoull(p, NULL, 10);
 	}
 
 	return found;
 }
 
-static int parse_region(char *line, struct drm_client_fdinfo *info,
-			size_t prefix_len,
+static int parse_region(const char *name, struct drm_client_fdinfo *info,
 			const char **region_map, unsigned int region_entries,
 			uint64_t *val)
 {
-	char *name, *p, *unit = NULL;
-	ssize_t name_len;
+	const char *p;
+	size_t name_len;
 	int found = -1;
 	unsigned int i;
 
-	p = index(line, ':');
-	if (!p || p == line)
+	p = strchr(name, ':');
+	if (!p)
 		return -1;
 
-	name_len = p - line - prefix_len;
+	name_len = p - name;
 	if (name_len < 1)
 		return -1;
-
-	name = line + prefix_len;
+	p++;
 
 	if (region_map) {
 		for (i = 0; i < region_entries; i++) {
@@ -162,20 +158,19 @@ static int parse_region(char *line, struct drm_client_fdinfo *info,
 	if (found < 0)
 		goto out;
 
-	while (*++p && isspace(*p))
-		;
+	p = ignore_space(p);
 	*val = strtoull(p, NULL, 10);
 
-	p = index(p, ' ');
+	p = strchr(p, ' ');
 	if (!p)
 		goto out;
+	p++;
 
-	unit = ++p;
-	if (!strcmp(unit, "KiB")) {
+	if (!strcmp(p, "KiB")) {
 		*val *= 1024;
-	} else if (!strcmp(unit, "MiB")) {
+	} else if (!strcmp(p, "MiB")) {
 		*val *= 1024 * 1024;
-	} else if (!strcmp(unit, "GiB")) {
+	} else if (!strcmp(p, "GiB")) {
 		*val *= 1024 * 1024 * 1024;
 	}
 
@@ -243,14 +238,14 @@ __igt_parse_drm_fdinfo(int dir, const char *fd, struct drm_client_fdinfo *info,
 			v = ignore_space(v);
 			strncpy(info->pdev, v, sizeof(info->pdev) - 1);
 		} else if (strstartswith(l, "drm-engine-capacity-", &keylen)) {
-			idx = parse_engine(l, info, keylen,
+			idx = parse_engine(l + keylen, info,
 					   name_map, map_entries, &val);
 			if (idx >= 0) {
 				info->capacity[idx] = val;
 				num_capacity++;
 			}
 		} else if (strstartswith(l, "drm-engine-", &keylen)) {
-			idx = parse_engine(l, info, keylen,
+			idx = parse_engine(l + keylen, info,
 					   name_map, map_entries, &val);
 			if (idx >= 0) {
 				if (!info->capacity[idx])
@@ -261,23 +256,23 @@ __igt_parse_drm_fdinfo(int dir, const char *fd, struct drm_client_fdinfo *info,
 					info->last_engine_index = idx;
 			}
 		} else if (strstartswith(l, "drm-total-", &keylen)) {
-			idx = parse_region(l, info, keylen,
+			idx = parse_region(l + keylen, info,
 					   region_map, region_entries, &val);
 			UPDATE_REGION(idx, total, val);
 		} else if (strstartswith(l, "drm-shared-", &keylen)) {
-			idx = parse_region(l, info, keylen,
+			idx = parse_region(l + keylen, info,
 					   region_map, region_entries, &val);
 			UPDATE_REGION(idx, shared, val);
 		} else if (strstartswith(l, "drm-resident-", &keylen)) {
-			idx = parse_region(l, info, keylen,
+			idx = parse_region(l + keylen, info,
 					   region_map, region_entries, &val);
 			UPDATE_REGION(idx, resident, val);
 		} else if (strstartswith(l, "drm-purgeable-", &keylen)) {
-			idx = parse_region(l, info, keylen,
+			idx = parse_region(l + keylen, info,
 					   region_map, region_entries, &val);
 			UPDATE_REGION(idx, purgeable, val);
 		} else if (strstartswith(l, "drm-active-", &keylen)) {
-			idx = parse_region(l, info, keylen,
+			idx = parse_region(l + keylen, info,
 					   region_map, region_entries, &val);
 			UPDATE_REGION(idx, active, val);
 		}
-- 
2.44.0


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

* [PATCH i-g-t 03/12] lib/igt_drm_fdinfo: Fix wrong name len assert
  2024-04-05  6:00 [PATCH i-g-t 00/12] gputop: Add support for xe Lucas De Marchi
  2024-04-05  6:00 ` [PATCH i-g-t 01/12] lib/igt_drm_fdinfo: Stop passing key twice Lucas De Marchi
  2024-04-05  6:00 ` [PATCH i-g-t 02/12] lib/igt_drm_fdinfo: Remove prefix arg from parse functions Lucas De Marchi
@ 2024-04-05  6:00 ` Lucas De Marchi
  2024-04-18 22:25   ` Umesh Nerlige Ramappa
  2024-04-19  7:48   ` Tvrtko Ursulin
  2024-04-05  6:00 ` [PATCH i-g-t 04/12] lib/igt_drm_fdinfo: Assert pdev is not truncated Lucas De Marchi
                   ` (12 subsequent siblings)
  15 siblings, 2 replies; 33+ messages in thread
From: Lucas De Marchi @ 2024-04-05  6:00 UTC (permalink / raw)
  To: igt-dev; +Cc: Tvrtko Ursulin, Umesh Nerlige Ramappa, Lucas De Marchi

When parsing engine name, at this point we have something like:

	"drm-engine-render:	232409619162 ns"
	            ^      ^
	            |      |
	          name     p

We are copying the engine name to the final destination, but
strlen(name) will actually contain the entire string. Since we already
know the name length, calculated previously, just use it for copying the
string.

Since each name is 256-bytes long, the assert doesn't trigger easily,
but it's better to be correct. And more efficient.

Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
 lib/igt_drm_fdinfo.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/lib/igt_drm_fdinfo.c b/lib/igt_drm_fdinfo.c
index 7a9ae94f0..9b1776775 100644
--- a/lib/igt_drm_fdinfo.c
+++ b/lib/igt_drm_fdinfo.c
@@ -96,8 +96,9 @@ static int parse_engine(const char *name, struct drm_client_fdinfo *info,
 
 		if (found < 0) {
 			assert((info->num_engines + 1) < ARRAY_SIZE(info->names));
-			assert((strlen(name) + 1) < sizeof(info->names[0]));
-			strncpy(info->names[info->num_engines], name, name_len);
+			assert(name_len  < sizeof(info->names[0]));
+			memcpy(info->names[info->num_engines], name, name_len);
+			info->names[info->num_engines][name_len] = '\0';
 			found = info->num_engines;
 		}
 	}
-- 
2.44.0


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

* [PATCH i-g-t 04/12] lib/igt_drm_fdinfo: Assert pdev is not truncated
  2024-04-05  6:00 [PATCH i-g-t 00/12] gputop: Add support for xe Lucas De Marchi
                   ` (2 preceding siblings ...)
  2024-04-05  6:00 ` [PATCH i-g-t 03/12] lib/igt_drm_fdinfo: Fix wrong name len assert Lucas De Marchi
@ 2024-04-05  6:00 ` Lucas De Marchi
  2024-04-18 22:27   ` Umesh Nerlige Ramappa
  2024-04-05  6:00 ` [PATCH i-g-t 05/12] lib/igt_drm_fdinfo: Detect invalid drm-client-id Lucas De Marchi
                   ` (11 subsequent siblings)
  15 siblings, 1 reply; 33+ messages in thread
From: Lucas De Marchi @ 2024-04-05  6:00 UTC (permalink / raw)
  To: igt-dev; +Cc: Tvrtko Ursulin, Umesh Nerlige Ramappa, Lucas De Marchi

Since strncpy() may truncate the output, just assert we have enough
room for the string. It's not a big problem since we always copy 1 byte
less than the capacity and info->pdev is zero-allocated. But we may as
well be sure we aren't truncating it.

Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
 lib/igt_drm_fdinfo.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/lib/igt_drm_fdinfo.c b/lib/igt_drm_fdinfo.c
index 9b1776775..de1962efa 100644
--- a/lib/igt_drm_fdinfo.c
+++ b/lib/igt_drm_fdinfo.c
@@ -237,6 +237,7 @@ __igt_parse_drm_fdinfo(int dir, const char *fd, struct drm_client_fdinfo *info,
 		} else if (strstartswith(l, "drm-pdev:", &keylen)) {
 			v = l + keylen;
 			v = ignore_space(v);
+			assert(strlen(v) < sizeof(info->pdev));
 			strncpy(info->pdev, v, sizeof(info->pdev) - 1);
 		} else if (strstartswith(l, "drm-engine-capacity-", &keylen)) {
 			idx = parse_engine(l + keylen, info,
-- 
2.44.0


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

* [PATCH i-g-t 05/12] lib/igt_drm_fdinfo: Detect invalid drm-client-id
  2024-04-05  6:00 [PATCH i-g-t 00/12] gputop: Add support for xe Lucas De Marchi
                   ` (3 preceding siblings ...)
  2024-04-05  6:00 ` [PATCH i-g-t 04/12] lib/igt_drm_fdinfo: Assert pdev is not truncated Lucas De Marchi
@ 2024-04-05  6:00 ` Lucas De Marchi
  2024-04-18 22:31   ` Umesh Nerlige Ramappa
  2024-04-05  6:00 ` [PATCH i-g-t 06/12] lib/igt_drm_fdinfo: Stop ignoring space where not needed Lucas De Marchi
                   ` (10 subsequent siblings)
  15 siblings, 1 reply; 33+ messages in thread
From: Lucas De Marchi @ 2024-04-05  6:00 UTC (permalink / raw)
  To: igt-dev; +Cc: Tvrtko Ursulin, Umesh Nerlige Ramappa, Lucas De Marchi

Use strtol() for string to long conversion which allows us to detect if
there was an invalid number. It also has the advantage that it already
ignores leading spaces.

Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
 lib/igt_drm_fdinfo.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/lib/igt_drm_fdinfo.c b/lib/igt_drm_fdinfo.c
index de1962efa..8eb5e5eed 100644
--- a/lib/igt_drm_fdinfo.c
+++ b/lib/igt_drm_fdinfo.c
@@ -216,6 +216,7 @@ __igt_parse_drm_fdinfo(int dir, const char *fd, struct drm_client_fdinfo *info,
 		uint64_t val = 0;
 		size_t keylen;
 		const char *v;
+		char *end_ptr;
 		int idx;
 
 		_buf = NULL;
@@ -229,11 +230,9 @@ __igt_parse_drm_fdinfo(int dir, const char *fd, struct drm_client_fdinfo *info,
 			}
 		}  else if (strstartswith(l, "drm-client-id:", &keylen)) {
 			v = l + keylen;
-			v = ignore_space(v);
-			if (*v) {
-				info->id = atol(v);
+			info->id = strtol(v, &end_ptr, 10);
+			if (end_ptr != v)
 				good++;
-			}
 		} else if (strstartswith(l, "drm-pdev:", &keylen)) {
 			v = l + keylen;
 			v = ignore_space(v);
-- 
2.44.0


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

* [PATCH i-g-t 06/12] lib/igt_drm_fdinfo: Stop ignoring space where not needed
  2024-04-05  6:00 [PATCH i-g-t 00/12] gputop: Add support for xe Lucas De Marchi
                   ` (4 preceding siblings ...)
  2024-04-05  6:00 ` [PATCH i-g-t 05/12] lib/igt_drm_fdinfo: Detect invalid drm-client-id Lucas De Marchi
@ 2024-04-05  6:00 ` Lucas De Marchi
  2024-04-18 22:34   ` Umesh Nerlige Ramappa
  2024-04-05  6:00 ` [PATCH i-g-t 07/12] lib/igt_drm_fdinfo: Parse unit for engine utilization Lucas De Marchi
                   ` (9 subsequent siblings)
  15 siblings, 1 reply; 33+ messages in thread
From: Lucas De Marchi @ 2024-04-05  6:00 UTC (permalink / raw)
  To: igt-dev; +Cc: Tvrtko Ursulin, Umesh Nerlige Ramappa, Lucas De Marchi

strto[ul]l() family of functions already ignore leading spaces. There's
no need to be explicit.

Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
 lib/igt_drm_fdinfo.c | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/lib/igt_drm_fdinfo.c b/lib/igt_drm_fdinfo.c
index 8eb5e5eed..5f05f210e 100644
--- a/lib/igt_drm_fdinfo.c
+++ b/lib/igt_drm_fdinfo.c
@@ -103,10 +103,8 @@ static int parse_engine(const char *name, struct drm_client_fdinfo *info,
 		}
 	}
 
-	if (found >= 0) {
-		p = ignore_space(p);
+	if (found >= 0)
 		*val = strtoull(p, NULL, 10);
-	}
 
 	return found;
 }
@@ -159,7 +157,6 @@ static int parse_region(const char *name, struct drm_client_fdinfo *info,
 	if (found < 0)
 		goto out;
 
-	p = ignore_space(p);
 	*val = strtoull(p, NULL, 10);
 
 	p = strchr(p, ' ');
-- 
2.44.0


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

* [PATCH i-g-t 07/12] lib/igt_drm_fdinfo: Parse unit for engine utilization
  2024-04-05  6:00 [PATCH i-g-t 00/12] gputop: Add support for xe Lucas De Marchi
                   ` (5 preceding siblings ...)
  2024-04-05  6:00 ` [PATCH i-g-t 06/12] lib/igt_drm_fdinfo: Stop ignoring space where not needed Lucas De Marchi
@ 2024-04-05  6:00 ` Lucas De Marchi
  2024-04-18 22:48   ` Umesh Nerlige Ramappa
  2024-04-05  6:00 ` [PATCH i-g-t 08/12] lib/igt_drm_fdinfo: Store 2 counters for "ticks" unit Lucas De Marchi
                   ` (8 subsequent siblings)
  15 siblings, 1 reply; 33+ messages in thread
From: Lucas De Marchi @ 2024-04-05  6:00 UTC (permalink / raw)
  To: igt-dev; +Cc: Tvrtko Ursulin, Umesh Nerlige Ramappa, Lucas De Marchi

Kernel adds a " ns" at the end of engine utilization. Make sure we parse
it so we don't fail if there's another suitable unit chosen by the
driver or another format.

This prepares the ground for xe driver which will use 2 timestamps
rather than 1 with a different unit, to make sure it's compatible with
SR-IOV so we don't have to handle the conversion between GPU and CPU
clock domains.

Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
 lib/igt_drm_fdinfo.c | 22 +++++++++++++++-------
 1 file changed, 15 insertions(+), 7 deletions(-)

diff --git a/lib/igt_drm_fdinfo.c b/lib/igt_drm_fdinfo.c
index 5f05f210e..1541a62c9 100644
--- a/lib/igt_drm_fdinfo.c
+++ b/lib/igt_drm_fdinfo.c
@@ -63,9 +63,10 @@ static const char *ignore_space(const char *s)
 
 static int parse_engine(const char *name, struct drm_client_fdinfo *info,
 			const char **name_map, unsigned int map_entries,
-			uint64_t *val)
+			uint64_t *val, const char **unit)
 {
 	const char *p;
+	char *end_ptr;
 	size_t name_len;
 	int found = -1;
 	unsigned int i;
@@ -103,8 +104,15 @@ static int parse_engine(const char *name, struct drm_client_fdinfo *info,
 		}
 	}
 
-	if (found >= 0)
-		*val = strtoull(p, NULL, 10);
+	if (found < 0)
+		return found;
+
+	*val = strtoull(p, &end_ptr, 10);
+	if (p == end_ptr)
+		return -1;
+
+	if (unit)
+		*unit = end_ptr;
 
 	return found;
 }
@@ -212,7 +220,7 @@ __igt_parse_drm_fdinfo(int dir, const char *fd, struct drm_client_fdinfo *info,
 	while ((l = strtok_r(_buf, "\n", &ctx))) {
 		uint64_t val = 0;
 		size_t keylen;
-		const char *v;
+		const char *v, *unit;
 		char *end_ptr;
 		int idx;
 
@@ -237,15 +245,15 @@ __igt_parse_drm_fdinfo(int dir, const char *fd, struct drm_client_fdinfo *info,
 			strncpy(info->pdev, v, sizeof(info->pdev) - 1);
 		} else if (strstartswith(l, "drm-engine-capacity-", &keylen)) {
 			idx = parse_engine(l + keylen, info,
-					   name_map, map_entries, &val);
+					   name_map, map_entries, &val, NULL);
 			if (idx >= 0) {
 				info->capacity[idx] = val;
 				num_capacity++;
 			}
 		} else if (strstartswith(l, "drm-engine-", &keylen)) {
 			idx = parse_engine(l + keylen, info,
-					   name_map, map_entries, &val);
-			if (idx >= 0) {
+					   name_map, map_entries, &val, &unit);
+			if (idx >= 0 && !strcmp(unit, " ns")) {
 				if (!info->capacity[idx])
 					info->capacity[idx] = 1;
 				info->busy[idx] = val;
-- 
2.44.0


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

* [PATCH i-g-t 08/12] lib/igt_drm_fdinfo: Store 2 counters for "ticks" unit
  2024-04-05  6:00 [PATCH i-g-t 00/12] gputop: Add support for xe Lucas De Marchi
                   ` (6 preceding siblings ...)
  2024-04-05  6:00 ` [PATCH i-g-t 07/12] lib/igt_drm_fdinfo: Parse unit for engine utilization Lucas De Marchi
@ 2024-04-05  6:00 ` Lucas De Marchi
  2024-04-05  6:00 ` [PATCH i-g-t 09/12] lib/igt_drm_clients: Store second data for ticks busyness Lucas De Marchi
                   ` (7 subsequent siblings)
  15 siblings, 0 replies; 33+ messages in thread
From: Lucas De Marchi @ 2024-04-05  6:00 UTC (permalink / raw)
  To: igt-dev; +Cc: Tvrtko Ursulin, Umesh Nerlige Ramappa, Lucas De Marchi

When using "ticks" as the unit for engine busyness, 2 counters are
expected. Add the second counter and store it inside the info, together
with the unit.

Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
 lib/igt_drm_fdinfo.c | 39 ++++++++++++++++++++++++++++-----------
 lib/igt_drm_fdinfo.h |  7 +++++++
 2 files changed, 35 insertions(+), 11 deletions(-)

diff --git a/lib/igt_drm_fdinfo.c b/lib/igt_drm_fdinfo.c
index 1541a62c9..12da1d699 100644
--- a/lib/igt_drm_fdinfo.c
+++ b/lib/igt_drm_fdinfo.c
@@ -63,7 +63,7 @@ static const char *ignore_space(const char *s)
 
 static int parse_engine(const char *name, struct drm_client_fdinfo *info,
 			const char **name_map, unsigned int map_entries,
-			uint64_t *val, const char **unit)
+			uint64_t *val, uint64_t *val2, const char **unit)
 {
 	const char *p;
 	char *end_ptr;
@@ -111,6 +111,11 @@ static int parse_engine(const char *name, struct drm_client_fdinfo *info,
 	if (p == end_ptr)
 		return -1;
 
+	if (val2) {
+		p = end_ptr;
+		*val2 = strtoull(p, &end_ptr, 10);
+	}
+
 	if (unit)
 		*unit = end_ptr;
 
@@ -218,7 +223,7 @@ __igt_parse_drm_fdinfo(int dir, const char *fd, struct drm_client_fdinfo *info,
 		return 0;
 
 	while ((l = strtok_r(_buf, "\n", &ctx))) {
-		uint64_t val = 0;
+		uint64_t val = 0, val2 = 0;
 		size_t keylen;
 		const char *v, *unit;
 		char *end_ptr;
@@ -245,21 +250,33 @@ __igt_parse_drm_fdinfo(int dir, const char *fd, struct drm_client_fdinfo *info,
 			strncpy(info->pdev, v, sizeof(info->pdev) - 1);
 		} else if (strstartswith(l, "drm-engine-capacity-", &keylen)) {
 			idx = parse_engine(l + keylen, info,
-					   name_map, map_entries, &val, NULL);
+					   name_map, map_entries, &val, NULL, NULL);
 			if (idx >= 0) {
 				info->capacity[idx] = val;
 				num_capacity++;
 			}
 		} else if (strstartswith(l, "drm-engine-", &keylen)) {
 			idx = parse_engine(l + keylen, info,
-					   name_map, map_entries, &val, &unit);
-			if (idx >= 0 && !strcmp(unit, " ns")) {
-				if (!info->capacity[idx])
-					info->capacity[idx] = 1;
-				info->busy[idx] = val;
-				info->num_engines++;
-				if (idx > info->last_engine_index)
-					info->last_engine_index = idx;
+					   name_map, map_entries, &val, &val2, &unit);
+			if (idx >= 0) {
+			       if (!strcmp(unit, " ns")) {
+				       if (!info->capacity[idx])
+					       info->capacity[idx] = 1;
+				       info->busy[idx] = val;
+				       info->unit[idx] = DRM_CLIENT_ENGINE_UNIT_NS;
+				       info->num_engines++;
+				       if (idx > info->last_engine_index)
+					       info->last_engine_index = idx;
+			       } else if (!strcmp(unit, " ticks")) {
+				       if (!info->capacity[idx])
+					       info->capacity[idx] = 1;
+				       info->busy[idx] = val;
+				       info->busy2[idx] = val2;
+				       info->unit[idx] = DRM_CLIENT_ENGINE_UNIT_TICKS;
+				       info->num_engines++;
+				       if (idx > info->last_engine_index)
+					       info->last_engine_index = idx;
+			       }
 			}
 		} else if (strstartswith(l, "drm-total-", &keylen)) {
 			idx = parse_region(l + keylen, info,
diff --git a/lib/igt_drm_fdinfo.h b/lib/igt_drm_fdinfo.h
index 1999c4f2b..7f5bafd2a 100644
--- a/lib/igt_drm_fdinfo.h
+++ b/lib/igt_drm_fdinfo.h
@@ -41,6 +41,11 @@ struct drm_client_meminfo {
 	uint64_t active;
 };
 
+enum drm_client_engine_unit {
+	DRM_CLIENT_ENGINE_UNIT_NS = 0,
+	DRM_CLIENT_ENGINE_UNIT_TICKS,
+};
+
 struct drm_client_fdinfo {
 	char driver[128];
 	char pdev[128];
@@ -51,6 +56,8 @@ struct drm_client_fdinfo {
 	unsigned int capacity[DRM_CLIENT_FDINFO_MAX_ENGINES];
 	char names[DRM_CLIENT_FDINFO_MAX_ENGINES][256];
 	uint64_t busy[DRM_CLIENT_FDINFO_MAX_ENGINES];
+	uint64_t busy2[DRM_CLIENT_FDINFO_MAX_ENGINES];
+	uint8_t unit[DRM_CLIENT_FDINFO_MAX_ENGINES];
 
 	unsigned int num_regions;
 	unsigned int last_region_index;
-- 
2.44.0


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

* [PATCH i-g-t 09/12] lib/igt_drm_clients: Store second data for ticks busyness
  2024-04-05  6:00 [PATCH i-g-t 00/12] gputop: Add support for xe Lucas De Marchi
                   ` (7 preceding siblings ...)
  2024-04-05  6:00 ` [PATCH i-g-t 08/12] lib/igt_drm_fdinfo: Store 2 counters for "ticks" unit Lucas De Marchi
@ 2024-04-05  6:00 ` Lucas De Marchi
  2024-04-05  6:00 ` [PATCH i-g-t 10/12] gputop: Extract method to update console size Lucas De Marchi
                   ` (6 subsequent siblings)
  15 siblings, 0 replies; 33+ messages in thread
From: Lucas De Marchi @ 2024-04-05  6:00 UTC (permalink / raw)
  To: igt-dev; +Cc: Tvrtko Ursulin, Umesh Nerlige Ramappa, Lucas De Marchi

When unit is "ticks" store the second counter to be used by tools.

Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
 lib/igt_drm_clients.c | 22 +++++++++++++++++-----
 lib/igt_drm_clients.h |  2 ++
 2 files changed, 19 insertions(+), 5 deletions(-)

diff --git a/lib/igt_drm_clients.c b/lib/igt_drm_clients.c
index 40d494441..da966769f 100644
--- a/lib/igt_drm_clients.c
+++ b/lib/igt_drm_clients.c
@@ -108,14 +108,22 @@ igt_drm_client_update(struct igt_drm_client *c, unsigned int pid, char *name,
 
 	for (i = 0; i <= c->engines->max_engine_id; i++) {
 		assert(i < ARRAY_SIZE(info->busy));
-
 		if (info->busy[i] < c->last[i])
 			continue; /* It will catch up soon. */
 
-		c->total_runtime += info->busy[i];
-		c->val[i] = info->busy[i] - c->last[i];
-		c->last_runtime += c->val[i];
-		c->last[i] = info->busy[i];
+		if (info->unit[i] == DRM_CLIENT_ENGINE_UNIT_NS) {
+			c->total_runtime += info->busy[i];
+			c->val[i] = info->busy[i] - c->last[i];
+			c->last_runtime += c->val[i];
+			c->last[i] = info->busy[i];
+		} else if (info->unit[i] == DRM_CLIENT_ENGINE_UNIT_TICKS) {
+			c->total_runtime += info->busy2[i];
+			c->val[i] = info->busy[i] - c->last[i];
+			c->val2[i] = info->busy2[i] - c->last2[i];
+			c->last[i] = info->busy[i];
+			c->last2[i] = info->busy2[i];
+			c->last_runtime += c->val2[i];
+		}
 	}
 
 	/* Memory regions */
@@ -184,7 +192,9 @@ igt_drm_client_add(struct igt_drm_clients *clients,
 	}
 
 	c->val = calloc(c->engines->max_engine_id + 1, sizeof(*c->val));
+	c->val2 = calloc(c->engines->max_engine_id + 1, sizeof(*c->val2));
 	c->last = calloc(c->engines->max_engine_id + 1, sizeof(*c->last));
+	c->last2 = calloc(c->engines->max_engine_id + 1, sizeof(*c->last2));
 	assert(c->val && c->last);
 
 	/* Memory regions */
@@ -224,7 +234,9 @@ void igt_drm_client_free(struct igt_drm_client *c, bool clear)
 	free(c->engines);
 
 	free(c->val);
+	free(c->val2);
 	free(c->last);
+	free(c->last2);
 
 	if (c->regions) {
 		for (i = 0; i <= c->regions->max_region_id; i++)
diff --git a/lib/igt_drm_clients.h b/lib/igt_drm_clients.h
index 52888aedc..cfc53a344 100644
--- a/lib/igt_drm_clients.h
+++ b/lib/igt_drm_clients.h
@@ -66,7 +66,9 @@ struct igt_drm_client {
 	unsigned long total_runtime; /* Aggregate busyness on all engines since client start. */
 	unsigned long last_runtime; /* Aggregate busyness on all engines since previous scan. */
 	unsigned long *val; /* Array of engine busyness data, relative to previous scan. */
+	unsigned long *val2; /* Array of engine busyness data2, relative to previous scan. */
 	uint64_t *last; /* Array of engine busyness data as parsed from fdinfo. */
+	uint64_t *last2; /* Array of engine busyness data2 as parsed from fdinfo. */
 	struct drm_client_meminfo *memory; /* Array of region memory utilisation as parsed from fdinfo. */
 };
 
-- 
2.44.0


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

* [PATCH i-g-t 10/12] gputop: Extract method to update console size
  2024-04-05  6:00 [PATCH i-g-t 00/12] gputop: Add support for xe Lucas De Marchi
                   ` (8 preceding siblings ...)
  2024-04-05  6:00 ` [PATCH i-g-t 09/12] lib/igt_drm_clients: Store second data for ticks busyness Lucas De Marchi
@ 2024-04-05  6:00 ` Lucas De Marchi
  2024-04-18 22:51   ` Umesh Nerlige Ramappa
  2024-04-05  6:00 ` [PATCH i-g-t 11/12] gputop: Extract clrscr() Lucas De Marchi
                   ` (5 subsequent siblings)
  15 siblings, 1 reply; 33+ messages in thread
From: Lucas De Marchi @ 2024-04-05  6:00 UTC (permalink / raw)
  To: igt-dev; +Cc: Tvrtko Ursulin, Umesh Nerlige Ramappa, Lucas De Marchi

Cleanup the mainloop moving the console size handling to a helper
functions.

Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
 tools/gputop.c | 30 +++++++++++++++++++-----------
 1 file changed, 19 insertions(+), 11 deletions(-)

diff --git a/tools/gputop.c b/tools/gputop.c
index b13044b50..1f349b3ed 100644
--- a/tools/gputop.c
+++ b/tools/gputop.c
@@ -243,6 +243,23 @@ static int client_cmp(const void *_a, const void *_b, void *unused)
 
 }
 
+static void update_console_size(int *w, int *h)
+{
+	struct winsize ws = {};
+
+	if (ioctl(0, TIOCGWINSZ, &ws) == -1)
+		return;
+
+	*w = ws.ws_col;
+	*h = ws.ws_row;
+
+	if (*w == 0 && *h == 0) {
+		/* Serial console. */
+		*w = 80;
+		*h = 24;
+	}
+}
+
 int main(int argc, char **argv)
 {
 	unsigned int period_us = 2e6;
@@ -258,17 +275,8 @@ int main(int argc, char **argv)
 	for (;;) {
 		struct igt_drm_client *c, *prevc = NULL;
 		int i, engine_w = 0, lines = 0;
-		struct winsize ws;
-
-		if (ioctl(0, TIOCGWINSZ, &ws) != -1) {
-			con_w = ws.ws_col;
-			con_h = ws.ws_row;
-			if (con_w == 0 && con_h == 0) {
-				/* Serial console. */
-				con_w = 80;
-				con_h = 24;
-			}
-		}
+
+		update_console_size(&con_w, &con_h);
 
 		igt_drm_clients_scan(clients, NULL, NULL, 0, NULL, 0);
 		igt_drm_clients_sort(clients, client_cmp);
-- 
2.44.0


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

* [PATCH i-g-t 11/12] gputop: Extract clrscr()
  2024-04-05  6:00 [PATCH i-g-t 00/12] gputop: Add support for xe Lucas De Marchi
                   ` (9 preceding siblings ...)
  2024-04-05  6:00 ` [PATCH i-g-t 10/12] gputop: Extract method to update console size Lucas De Marchi
@ 2024-04-05  6:00 ` Lucas De Marchi
  2024-04-18 22:52   ` Umesh Nerlige Ramappa
  2024-04-05  6:00 ` [PATCH i-g-t 12/12] RFC: gputop: Add support for ticks unit Lucas De Marchi
                   ` (4 subsequent siblings)
  15 siblings, 1 reply; 33+ messages in thread
From: Lucas De Marchi @ 2024-04-05  6:00 UTC (permalink / raw)
  To: igt-dev; +Cc: Tvrtko Ursulin, Umesh Nerlige Ramappa, Lucas De Marchi

Make it clear what the CSI is doing.

Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
 tools/gputop.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/tools/gputop.c b/tools/gputop.c
index 1f349b3ed..ea23e1de5 100644
--- a/tools/gputop.c
+++ b/tools/gputop.c
@@ -260,6 +260,11 @@ static void update_console_size(int *w, int *h)
 	}
 }
 
+static void clrscr(void)
+{
+	printf("\033[H\033[J");
+}
+
 int main(int argc, char **argv)
 {
 	unsigned int period_us = 2e6;
@@ -276,12 +281,11 @@ int main(int argc, char **argv)
 		struct igt_drm_client *c, *prevc = NULL;
 		int i, engine_w = 0, lines = 0;
 
-		update_console_size(&con_w, &con_h);
-
 		igt_drm_clients_scan(clients, NULL, NULL, 0, NULL, 0);
 		igt_drm_clients_sort(clients, client_cmp);
 
-		printf("\033[H\033[J");
+		update_console_size(&con_w, &con_h);
+		clrscr();
 
 		igt_for_each_drm_client(clients, c, i) {
 			assert(c->status != IGT_DRM_CLIENT_PROBE);
-- 
2.44.0


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

* [PATCH i-g-t 12/12] RFC: gputop: Add support for ticks unit
  2024-04-05  6:00 [PATCH i-g-t 00/12] gputop: Add support for xe Lucas De Marchi
                   ` (10 preceding siblings ...)
  2024-04-05  6:00 ` [PATCH i-g-t 11/12] gputop: Extract clrscr() Lucas De Marchi
@ 2024-04-05  6:00 ` Lucas De Marchi
  2024-04-05  8:04 ` ✗ GitLab.Pipeline: warning for gputop: Add support for xe Patchwork
                   ` (3 subsequent siblings)
  15 siblings, 0 replies; 33+ messages in thread
From: Lucas De Marchi @ 2024-04-05  6:00 UTC (permalink / raw)
  To: igt-dev; +Cc: Tvrtko Ursulin, Umesh Nerlige Ramappa, Lucas De Marchi

Add support for "ticks" that take out the CPU time elapsed from account
and rather uses the GPU timestamp as recorded from fdinfo. The busyness
is calculated as, for each engine class:

	         u[i+1] - u[i]
	pct  = -----------------
	        Gt[i+1] - Gt[i]

where u[i] is the number of GPU ticks used by a client on an engine and
Gt[i] is the GPU timestamp in ticks. Main advantage over previous "ns"
unit type is that there's only one clock domain involved and it's
expected to work better with SR-IOV when each VF gets a certain quanta
of the GPU - that quanta should be reported as 100% GPU utilization,
which would never be achieved if the CPU clock domain was involved.

Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
 lib/igt_drm_clients.c | 2 ++
 lib/igt_drm_clients.h | 1 +
 tools/gputop.c        | 8 ++++++--
 3 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/lib/igt_drm_clients.c b/lib/igt_drm_clients.c
index da966769f..22c56b279 100644
--- a/lib/igt_drm_clients.c
+++ b/lib/igt_drm_clients.c
@@ -195,6 +195,7 @@ igt_drm_client_add(struct igt_drm_clients *clients,
 	c->val2 = calloc(c->engines->max_engine_id + 1, sizeof(*c->val2));
 	c->last = calloc(c->engines->max_engine_id + 1, sizeof(*c->last));
 	c->last2 = calloc(c->engines->max_engine_id + 1, sizeof(*c->last2));
+	c->unit = calloc(c->engines->max_engine_id + 1, sizeof(*c->unit));
 	assert(c->val && c->last);
 
 	/* Memory regions */
@@ -237,6 +238,7 @@ void igt_drm_client_free(struct igt_drm_client *c, bool clear)
 	free(c->val2);
 	free(c->last);
 	free(c->last2);
+	free(c->unit);
 
 	if (c->regions) {
 		for (i = 0; i <= c->regions->max_region_id; i++)
diff --git a/lib/igt_drm_clients.h b/lib/igt_drm_clients.h
index cfc53a344..9c2e96d1e 100644
--- a/lib/igt_drm_clients.h
+++ b/lib/igt_drm_clients.h
@@ -69,6 +69,7 @@ struct igt_drm_client {
 	unsigned long *val2; /* Array of engine busyness data2, relative to previous scan. */
 	uint64_t *last; /* Array of engine busyness data as parsed from fdinfo. */
 	uint64_t *last2; /* Array of engine busyness data2 as parsed from fdinfo. */
+	enum  drm_client_engine_unit *unit; /* Array of unit used for engine busyness data. */
 	struct drm_client_meminfo *memory; /* Array of region memory utilisation as parsed from fdinfo. */
 };
 
diff --git a/tools/gputop.c b/tools/gputop.c
index ea23e1de5..3649bf4d7 100644
--- a/tools/gputop.c
+++ b/tools/gputop.c
@@ -183,8 +183,12 @@ print_client(struct igt_drm_client *c, struct igt_drm_client **prevc,
 		if (!c->engines->capacity[i])
 			continue;
 
-		pct = (double)c->val[i] / period_us / 1e3 * 100 /
-		      c->engines->capacity[i];
+		if (c->unit[i] == DRM_CLIENT_ENGINE_UNIT_NS)
+			pct = (double)c->val[i] / period_us / 1e3 * 100 /
+			      c->engines->capacity[i];
+		else if (c->unit[i] == DRM_CLIENT_ENGINE_UNIT_TICKS)
+			pct = (double)(c->val2[i] * 100) / c->val[1] /
+			      c->engines->capacity[i];
 
 		/*
 		 * Guard against fluctuations between our scanning period and
-- 
2.44.0


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

* ✗ GitLab.Pipeline: warning for gputop: Add support for xe
  2024-04-05  6:00 [PATCH i-g-t 00/12] gputop: Add support for xe Lucas De Marchi
                   ` (11 preceding siblings ...)
  2024-04-05  6:00 ` [PATCH i-g-t 12/12] RFC: gputop: Add support for ticks unit Lucas De Marchi
@ 2024-04-05  8:04 ` Patchwork
  2024-04-05  8:17 ` ✓ CI.xeBAT: success " Patchwork
                   ` (2 subsequent siblings)
  15 siblings, 0 replies; 33+ messages in thread
From: Patchwork @ 2024-04-05  8:04 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: igt-dev

== Series Details ==

Series: gputop: Add support for xe
URL   : https://patchwork.freedesktop.org/series/132059/
State : warning

== Summary ==

Pipeline status: FAILED.

see https://gitlab.freedesktop.org/gfx-ci/igt-ci-tags/-/pipelines/1146422 for the overview.

build:tests-debian-meson-mips has failed (https://gitlab.freedesktop.org/gfx-ci/igt-ci-tags/-/jobs/57243898):
  Checking if the job's project is part of a well-known group...
  Thank you for contributing to freedesktop.org
  Fetching changes...
  Reinitialized existing Git repository in /builds/gfx-ci/igt-ci-tags/.git/
  Checking out 03d7ea5c as detached HEAD (ref is intel/IGTPW_10979)...
  Removing build/
  Removing installdir/
  
  Skipping Git submodules setup
  section_end:1712303932:get_sources
  section_start:1712303932:step_script
  Executing "step_script" stage of the job script
  Using docker image sha256:cc55efdc667be826910d414a562c76ce1130a9c15255a0dd115431bc42f83448 for registry.freedesktop.org/gfx-ci/igt-ci-tags/build-debian-mips:commit-03d7ea5c505de0940dc518e5e71d24afb397f36a with digest registry.freedesktop.org/gfx-ci/igt-ci-tags/build-debian-mips@sha256:c829c44880da4782b7a72626c259ac6904b4bd5f08601e66b3be889ca1c0cf79 ...
  $ /host/bin/curl -s -L --cacert /host/ca-certificates.crt --retry 4 -f --retry-delay 60 https://gitlab.freedesktop.org/freedesktop/helm-gitlab-infra/-/raw/main/runner-gating/runner-gating.sh  | sh
  section_end:1712303933:step_script
  section_start:1712303933:cleanup_file_variables
  Cleaning up project directory and file based variables
  section_end:1712303935:cleanup_file_variables
  ERROR: Job failed: exit code 137

== Logs ==

For more details see: https://gitlab.freedesktop.org/gfx-ci/igt-ci-tags/-/pipelines/1146422

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

* ✓ CI.xeBAT: success for gputop: Add support for xe
  2024-04-05  6:00 [PATCH i-g-t 00/12] gputop: Add support for xe Lucas De Marchi
                   ` (12 preceding siblings ...)
  2024-04-05  8:04 ` ✗ GitLab.Pipeline: warning for gputop: Add support for xe Patchwork
@ 2024-04-05  8:17 ` Patchwork
  2024-04-05  8:27 ` ✓ Fi.CI.BAT: " Patchwork
  2024-04-05 16:22 ` ✗ Fi.CI.IGT: failure " Patchwork
  15 siblings, 0 replies; 33+ messages in thread
From: Patchwork @ 2024-04-05  8:17 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: igt-dev

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

== Series Details ==

Series: gputop: Add support for xe
URL   : https://patchwork.freedesktop.org/series/132059/
State : success

== Summary ==

CI Bug Log - changes from XEIGT_7800_BAT -> XEIGTPW_10979_BAT
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

Participating hosts (5 -> 5)
------------------------------

  No changes in participating hosts


Changes
-------

  No changes found


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

  * IGT: IGT_7800 -> IGTPW_10979

  IGTPW_10979: 10979
  IGT_7800: 7800
  xe-1043-9619b05620f06aaf89a5c603c2ba55c1419ee78e: 9619b05620f06aaf89a5c603c2ba55c1419ee78e

== Logs ==

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

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

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

* ✓ Fi.CI.BAT: success for gputop: Add support for xe
  2024-04-05  6:00 [PATCH i-g-t 00/12] gputop: Add support for xe Lucas De Marchi
                   ` (13 preceding siblings ...)
  2024-04-05  8:17 ` ✓ CI.xeBAT: success " Patchwork
@ 2024-04-05  8:27 ` Patchwork
  2024-04-05 16:22 ` ✗ Fi.CI.IGT: failure " Patchwork
  15 siblings, 0 replies; 33+ messages in thread
From: Patchwork @ 2024-04-05  8:27 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: igt-dev

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

== Series Details ==

Series: gputop: Add support for xe
URL   : https://patchwork.freedesktop.org/series/132059/
State : success

== Summary ==

CI Bug Log - changes from IGT_7800 -> IGTPW_10979
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

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

Participating hosts (34 -> 34)
------------------------------

  Additional (4): fi-blb-e6850 bat-kbl-2 bat-dg1-7 bat-arls-3 
  Missing    (4): bat-mtlp-8 bat-dg2-11 bat-jsl-1 fi-snb-2520m 

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

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

### IGT changes ###

#### Issues hit ####

  * igt@debugfs_test@basic-hwmon:
    - bat-arls-3:         NOTRUN -> [SKIP][1] ([i915#9318])
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/bat-arls-3/igt@debugfs_test@basic-hwmon.html

  * igt@fbdev@info:
    - bat-kbl-2:          NOTRUN -> [SKIP][2] ([i915#1849])
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/bat-kbl-2/igt@fbdev@info.html

  * igt@gem_lmem_swapping@parallel-random-engines:
    - bat-kbl-2:          NOTRUN -> [SKIP][3] +39 other tests skip
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/bat-kbl-2/igt@gem_lmem_swapping@parallel-random-engines.html
    - bat-arls-3:         NOTRUN -> [SKIP][4] ([i915#10213]) +3 other tests skip
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/bat-arls-3/igt@gem_lmem_swapping@parallel-random-engines.html

  * igt@gem_mmap@basic:
    - bat-dg1-7:          NOTRUN -> [SKIP][5] ([i915#4083])
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/bat-dg1-7/igt@gem_mmap@basic.html
    - bat-arls-3:         NOTRUN -> [SKIP][6] ([i915#4083])
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/bat-arls-3/igt@gem_mmap@basic.html

  * igt@gem_render_tiled_blits@basic:
    - bat-arls-3:         NOTRUN -> [SKIP][7] ([i915#10197] / [i915#10211] / [i915#4079])
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/bat-arls-3/igt@gem_render_tiled_blits@basic.html

  * igt@gem_tiled_blits@basic:
    - bat-arls-3:         NOTRUN -> [SKIP][8] ([i915#10196] / [i915#4077]) +2 other tests skip
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/bat-arls-3/igt@gem_tiled_blits@basic.html

  * igt@gem_tiled_fence_blits@basic:
    - bat-dg1-7:          NOTRUN -> [SKIP][9] ([i915#4077]) +2 other tests skip
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/bat-dg1-7/igt@gem_tiled_fence_blits@basic.html

  * igt@gem_tiled_pread_basic:
    - bat-dg1-7:          NOTRUN -> [SKIP][10] ([i915#4079]) +1 other test skip
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/bat-dg1-7/igt@gem_tiled_pread_basic.html
    - bat-arls-3:         NOTRUN -> [SKIP][11] ([i915#10206] / [i915#4079])
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/bat-arls-3/igt@gem_tiled_pread_basic.html

  * igt@i915_pm_rpm@module-reload:
    - fi-blb-e6850:       NOTRUN -> [SKIP][12] +32 other tests skip
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/fi-blb-e6850/igt@i915_pm_rpm@module-reload.html

  * igt@i915_pm_rps@basic-api:
    - bat-dg1-7:          NOTRUN -> [SKIP][13] ([i915#6621])
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/bat-dg1-7/igt@i915_pm_rps@basic-api.html
    - bat-arls-3:         NOTRUN -> [SKIP][14] ([i915#10209])
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/bat-arls-3/igt@i915_pm_rps@basic-api.html

  * igt@i915_selftest@live@execlists:
    - fi-bsw-nick:        [PASS][15] -> [ABORT][16] ([i915#10594])
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7800/fi-bsw-nick/igt@i915_selftest@live@execlists.html
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/fi-bsw-nick/igt@i915_selftest@live@execlists.html

  * igt@kms_addfb_basic@addfb25-x-tiled-legacy:
    - bat-arls-3:         NOTRUN -> [SKIP][17] ([i915#10200]) +9 other tests skip
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/bat-arls-3/igt@kms_addfb_basic@addfb25-x-tiled-legacy.html

  * igt@kms_addfb_basic@addfb25-x-tiled-mismatch-legacy:
    - bat-dg1-7:          NOTRUN -> [SKIP][18] ([i915#4212]) +7 other tests skip
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/bat-dg1-7/igt@kms_addfb_basic@addfb25-x-tiled-mismatch-legacy.html

  * igt@kms_addfb_basic@basic-y-tiled-legacy:
    - bat-dg1-7:          NOTRUN -> [SKIP][19] ([i915#4215])
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/bat-dg1-7/igt@kms_addfb_basic@basic-y-tiled-legacy.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic:
    - bat-arls-3:         NOTRUN -> [SKIP][20] ([i915#10202]) +1 other test skip
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/bat-arls-3/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy:
    - bat-dg1-7:          NOTRUN -> [SKIP][21] ([i915#4103] / [i915#4213]) +1 other test skip
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/bat-dg1-7/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html

  * igt@kms_dsc@dsc-basic:
    - bat-arls-3:         NOTRUN -> [SKIP][22] ([i915#9886])
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/bat-arls-3/igt@kms_dsc@dsc-basic.html
    - bat-dg1-7:          NOTRUN -> [SKIP][23] ([i915#3555] / [i915#3840])
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/bat-dg1-7/igt@kms_dsc@dsc-basic.html

  * igt@kms_force_connector_basic@force-load-detect:
    - bat-arls-3:         NOTRUN -> [SKIP][24] ([i915#10207])
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/bat-arls-3/igt@kms_force_connector_basic@force-load-detect.html
    - bat-dg1-7:          NOTRUN -> [SKIP][25]
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/bat-dg1-7/igt@kms_force_connector_basic@force-load-detect.html

  * igt@kms_hdmi_inject@inject-audio:
    - bat-dg1-7:          NOTRUN -> [SKIP][26] ([i915#433])
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/bat-dg1-7/igt@kms_hdmi_inject@inject-audio.html

  * igt@kms_pm_backlight@basic-brightness:
    - bat-dg1-7:          NOTRUN -> [SKIP][27] ([i915#5354])
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/bat-dg1-7/igt@kms_pm_backlight@basic-brightness.html
    - bat-arls-3:         NOTRUN -> [SKIP][28] ([i915#9812])
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/bat-arls-3/igt@kms_pm_backlight@basic-brightness.html

  * igt@kms_psr@psr-primary-mmap-gtt:
    - bat-arls-3:         NOTRUN -> [SKIP][29] ([i915#9732]) +3 other tests skip
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/bat-arls-3/igt@kms_psr@psr-primary-mmap-gtt.html

  * igt@kms_psr@psr-primary-page-flip:
    - bat-dg1-7:          NOTRUN -> [SKIP][30] ([i915#1072] / [i915#9732]) +3 other tests skip
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/bat-dg1-7/igt@kms_psr@psr-primary-page-flip.html

  * igt@kms_setmode@basic-clone-single-crtc:
    - bat-arls-3:         NOTRUN -> [SKIP][31] ([i915#10208] / [i915#8809])
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/bat-arls-3/igt@kms_setmode@basic-clone-single-crtc.html
    - bat-dg1-7:          NOTRUN -> [SKIP][32] ([i915#3555])
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/bat-dg1-7/igt@kms_setmode@basic-clone-single-crtc.html

  * igt@prime_vgem@basic-fence-flip:
    - bat-dg1-7:          NOTRUN -> [SKIP][33] ([i915#3708]) +3 other tests skip
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/bat-dg1-7/igt@prime_vgem@basic-fence-flip.html

  * igt@prime_vgem@basic-fence-mmap:
    - bat-dg1-7:          NOTRUN -> [SKIP][34] ([i915#3708] / [i915#4077]) +1 other test skip
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/bat-dg1-7/igt@prime_vgem@basic-fence-mmap.html
    - bat-arls-3:         NOTRUN -> [SKIP][35] ([i915#10196] / [i915#3708] / [i915#4077]) +1 other test skip
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/bat-arls-3/igt@prime_vgem@basic-fence-mmap.html

  * igt@prime_vgem@basic-fence-read:
    - bat-arls-3:         NOTRUN -> [SKIP][36] ([i915#10212] / [i915#3708])
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/bat-arls-3/igt@prime_vgem@basic-fence-read.html

  * igt@prime_vgem@basic-read:
    - bat-arls-3:         NOTRUN -> [SKIP][37] ([i915#10214] / [i915#3708])
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/bat-arls-3/igt@prime_vgem@basic-read.html

  * igt@prime_vgem@basic-write:
    - bat-arls-3:         NOTRUN -> [SKIP][38] ([i915#10216] / [i915#3708])
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/bat-arls-3/igt@prime_vgem@basic-write.html

  
#### Possible fixes ####

  * igt@i915_pm_rpm@module-reload:
    - {bat-mtlp-9}:       [WARN][39] ([i915#10436]) -> [PASS][40]
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7800/bat-mtlp-9/igt@i915_pm_rpm@module-reload.html
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/bat-mtlp-9/igt@i915_pm_rpm@module-reload.html

  * igt@i915_selftest@live@gt_lrc:
    - bat-arls-1:         [DMESG-WARN][41] ([i915#10341]) -> [PASS][42]
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7800/bat-arls-1/igt@i915_selftest@live@gt_lrc.html
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/bat-arls-1/igt@i915_selftest@live@gt_lrc.html

  * igt@i915_selftest@live@objects:
    - bat-arls-1:         [DMESG-FAIL][43] ([i915#10262]) -> [PASS][44] +29 other tests pass
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7800/bat-arls-1/igt@i915_selftest@live@objects.html
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/bat-arls-1/igt@i915_selftest@live@objects.html

  * igt@kms_flip@basic-flip-vs-wf_vblank@a-dp7:
    - {bat-mtlp-9}:       [DMESG-WARN][45] ([i915#10435] / [i915#9157]) -> [PASS][46]
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7800/bat-mtlp-9/igt@kms_flip@basic-flip-vs-wf_vblank@a-dp7.html
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/bat-mtlp-9/igt@kms_flip@basic-flip-vs-wf_vblank@a-dp7.html

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

  [i915#10196]: https://gitlab.freedesktop.org/drm/intel/issues/10196
  [i915#10197]: https://gitlab.freedesktop.org/drm/intel/issues/10197
  [i915#10200]: https://gitlab.freedesktop.org/drm/intel/issues/10200
  [i915#10202]: https://gitlab.freedesktop.org/drm/intel/issues/10202
  [i915#10206]: https://gitlab.freedesktop.org/drm/intel/issues/10206
  [i915#10207]: https://gitlab.freedesktop.org/drm/intel/issues/10207
  [i915#10208]: https://gitlab.freedesktop.org/drm/intel/issues/10208
  [i915#10209]: https://gitlab.freedesktop.org/drm/intel/issues/10209
  [i915#10211]: https://gitlab.freedesktop.org/drm/intel/issues/10211
  [i915#10212]: https://gitlab.freedesktop.org/drm/intel/issues/10212
  [i915#10213]: https://gitlab.freedesktop.org/drm/intel/issues/10213
  [i915#10214]: https://gitlab.freedesktop.org/drm/intel/issues/10214
  [i915#10216]: https://gitlab.freedesktop.org/drm/intel/issues/10216
  [i915#10262]: https://gitlab.freedesktop.org/drm/intel/issues/10262
  [i915#10341]: https://gitlab.freedesktop.org/drm/intel/issues/10341
  [i915#10435]: https://gitlab.freedesktop.org/drm/intel/issues/10435
  [i915#10436]: https://gitlab.freedesktop.org/drm/intel/issues/10436
  [i915#10594]: https://gitlab.freedesktop.org/drm/intel/issues/10594
  [i915#1072]: https://gitlab.freedesktop.org/drm/intel/issues/1072
  [i915#1849]: https://gitlab.freedesktop.org/drm/intel/issues/1849
  [i915#3555]: https://gitlab.freedesktop.org/drm/intel/issues/3555
  [i915#3708]: https://gitlab.freedesktop.org/drm/intel/issues/3708
  [i915#3840]: https://gitlab.freedesktop.org/drm/intel/issues/3840
  [i915#4077]: https://gitlab.freedesktop.org/drm/intel/issues/4077
  [i915#4079]: https://gitlab.freedesktop.org/drm/intel/issues/4079
  [i915#4083]: https://gitlab.freedesktop.org/drm/intel/issues/4083
  [i915#4103]: https://gitlab.freedesktop.org/drm/intel/issues/4103
  [i915#4212]: https://gitlab.freedesktop.org/drm/intel/issues/4212
  [i915#4213]: https://gitlab.freedesktop.org/drm/intel/issues/4213
  [i915#4215]: https://gitlab.freedesktop.org/drm/intel/issues/4215
  [i915#433]: https://gitlab.freedesktop.org/drm/intel/issues/433
  [i915#5354]: https://gitlab.freedesktop.org/drm/intel/issues/5354
  [i915#6621]: https://gitlab.freedesktop.org/drm/intel/issues/6621
  [i915#8809]: https://gitlab.freedesktop.org/drm/intel/issues/8809
  [i915#9157]: https://gitlab.freedesktop.org/drm/intel/issues/9157
  [i915#9318]: https://gitlab.freedesktop.org/drm/intel/issues/9318
  [i915#9732]: https://gitlab.freedesktop.org/drm/intel/issues/9732
  [i915#9812]: https://gitlab.freedesktop.org/drm/intel/issues/9812
  [i915#9886]: https://gitlab.freedesktop.org/drm/intel/issues/9886


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

  * CI: CI-20190529 -> None
  * IGT: IGT_7800 -> IGTPW_10979

  CI-20190529: 20190529
  CI_DRM_14531: 9619b05620f06aaf89a5c603c2ba55c1419ee78e @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_10979: 10979
  IGT_7800: 7800


Testlist changes
----------------

-igt@kms_sharpness_filter@filter-basic
-igt@kms_sharpness_filter@filter-dpms
-igt@kms_sharpness_filter@filter-formats
-igt@kms_sharpness_filter@filter-modifiers
-igt@kms_sharpness_filter@filter-rotations
-igt@kms_sharpness_filter@filter-scaler-downscale
-igt@kms_sharpness_filter@filter-scaler-upscale
-igt@kms_sharpness_filter@filter-strength
-igt@kms_sharpness_filter@filter-suspend
-igt@kms_sharpness_filter@filter-tap
-igt@kms_sharpness_filter@filter-toggle
-igt@kms_sharpness_filter@invalid-filter-with-plane
-igt@kms_sharpness_filter@invalid-filter-with-scaler
-igt@kms_sharpness_filter@invalid-plane-with-filter

== Logs ==

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

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

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

* ✗ Fi.CI.IGT: failure for gputop: Add support for xe
  2024-04-05  6:00 [PATCH i-g-t 00/12] gputop: Add support for xe Lucas De Marchi
                   ` (14 preceding siblings ...)
  2024-04-05  8:27 ` ✓ Fi.CI.BAT: " Patchwork
@ 2024-04-05 16:22 ` Patchwork
  15 siblings, 0 replies; 33+ messages in thread
From: Patchwork @ 2024-04-05 16:22 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: igt-dev

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

== Series Details ==

Series: gputop: Add support for xe
URL   : https://patchwork.freedesktop.org/series/132059/
State : failure

== Summary ==

CI Bug Log - changes from IGT_7800_full -> IGTPW_10979_full
====================================================

Summary
-------

  **FAILURE**

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

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

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

  Additional (1): shard-snb-0 

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

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

### IGT changes ###

#### Possible regressions ####

  * igt@gem_exec_schedule@deep@vcs1:
    - shard-dg1:          NOTRUN -> [INCOMPLETE][1]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-15/igt@gem_exec_schedule@deep@vcs1.html

  * igt@i915_pm_rpm@gem-execbuf-stress@extra-wait-smem0:
    - shard-dg2:          [PASS][2] -> [INCOMPLETE][3]
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7800/shard-dg2-6/igt@i915_pm_rpm@gem-execbuf-stress@extra-wait-smem0.html
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-2/igt@i915_pm_rpm@gem-execbuf-stress@extra-wait-smem0.html

  * igt@kms_display_modes@extended-mode-basic@pipe-a-hdmi-a-1-pipe-b-vga-1:
    - shard-snb:          NOTRUN -> [FAIL][4] +3 other tests fail
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-snb7/igt@kms_display_modes@extended-mode-basic@pipe-a-hdmi-a-1-pipe-b-vga-1.html

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

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

### IGT changes ###

#### Issues hit ####

  * igt@api_intel_bb@blit-reloc-keep-cache:
    - shard-dg1:          NOTRUN -> [SKIP][5] ([i915#8411]) +1 other test skip
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-16/igt@api_intel_bb@blit-reloc-keep-cache.html
    - shard-dg2:          NOTRUN -> [SKIP][6] ([i915#8411]) +1 other test skip
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-2/igt@api_intel_bb@blit-reloc-keep-cache.html

  * igt@api_intel_bb@render-ccs:
    - shard-dg2:          NOTRUN -> [FAIL][7] ([i915#10380])
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-2/igt@api_intel_bb@render-ccs.html

  * igt@debugfs_test@basic-hwmon:
    - shard-mtlp:         NOTRUN -> [SKIP][8] ([i915#9318])
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-8/igt@debugfs_test@basic-hwmon.html
    - shard-rkl:          NOTRUN -> [SKIP][9] ([i915#9318])
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-5/igt@debugfs_test@basic-hwmon.html

  * igt@device_reset@cold-reset-bound:
    - shard-dg1:          NOTRUN -> [SKIP][10] ([i915#7701])
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-18/igt@device_reset@cold-reset-bound.html
    - shard-dg2:          NOTRUN -> [SKIP][11] ([i915#7701])
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-5/igt@device_reset@cold-reset-bound.html

  * igt@device_reset@unbind-reset-rebind:
    - shard-dg1:          NOTRUN -> [INCOMPLETE][12] ([i915#9408] / [i915#9618])
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-17/igt@device_reset@unbind-reset-rebind.html

  * igt@drm_fdinfo@busy-idle-check-all@ccs0:
    - shard-mtlp:         NOTRUN -> [SKIP][13] ([i915#8414]) +17 other tests skip
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-5/igt@drm_fdinfo@busy-idle-check-all@ccs0.html

  * igt@drm_fdinfo@isolation@vecs0:
    - shard-dg1:          NOTRUN -> [SKIP][14] ([i915#8414]) +16 other tests skip
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-15/igt@drm_fdinfo@isolation@vecs0.html

  * igt@drm_fdinfo@virtual-busy-all:
    - shard-dg2:          NOTRUN -> [SKIP][15] ([i915#8414]) +2 other tests skip
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-7/igt@drm_fdinfo@virtual-busy-all.html

  * igt@gem_busy@semaphore:
    - shard-mtlp:         NOTRUN -> [SKIP][16] ([i915#3936])
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-1/igt@gem_busy@semaphore.html

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

  * igt@gem_ccs@ctrl-surf-copy:
    - shard-mtlp:         NOTRUN -> [SKIP][18] ([i915#3555] / [i915#9323]) +1 other test skip
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-7/igt@gem_ccs@ctrl-surf-copy.html
    - shard-rkl:          NOTRUN -> [SKIP][19] ([i915#3555] / [i915#9323]) +1 other test skip
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-5/igt@gem_ccs@ctrl-surf-copy.html

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

  * igt@gem_close_race@multigpu-basic-threads:
    - shard-tglu:         NOTRUN -> [SKIP][21] ([i915#7697])
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-tglu-9/igt@gem_close_race@multigpu-basic-threads.html

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

  * igt@gem_ctx_persistence@heartbeat-hang:
    - shard-mtlp:         NOTRUN -> [SKIP][23] ([i915#8555])
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-8/igt@gem_ctx_persistence@heartbeat-hang.html

  * igt@gem_ctx_persistence@heartbeat-hostile:
    - shard-dg2:          NOTRUN -> [SKIP][24] ([i915#8555]) +1 other test skip
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-10/igt@gem_ctx_persistence@heartbeat-hostile.html
    - shard-dg1:          NOTRUN -> [SKIP][25] ([i915#8555]) +1 other test skip
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-16/igt@gem_ctx_persistence@heartbeat-hostile.html

  * igt@gem_ctx_sseu@engines:
    - shard-dg1:          NOTRUN -> [SKIP][26] ([i915#280])
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-15/igt@gem_ctx_sseu@engines.html

  * igt@gem_ctx_sseu@mmap-args:
    - shard-dg2:          NOTRUN -> [SKIP][27] ([i915#280])
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-5/igt@gem_ctx_sseu@mmap-args.html
    - shard-rkl:          NOTRUN -> [SKIP][28] ([i915#280]) +1 other test skip
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-2/igt@gem_ctx_sseu@mmap-args.html

  * igt@gem_eio@kms:
    - shard-dg2:          [PASS][29] -> [FAIL][30] ([i915#5784])
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7800/shard-dg2-11/igt@gem_eio@kms.html
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-2/igt@gem_eio@kms.html

  * igt@gem_exec_balancer@bonded-dual:
    - shard-dg1:          NOTRUN -> [SKIP][31] ([i915#4771])
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-16/igt@gem_exec_balancer@bonded-dual.html

  * igt@gem_exec_balancer@bonded-pair:
    - shard-dg2:          NOTRUN -> [SKIP][32] ([i915#4771])
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-1/igt@gem_exec_balancer@bonded-pair.html

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

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

  * igt@gem_exec_balancer@parallel-keep-submit-fence:
    - shard-rkl:          NOTRUN -> [SKIP][35] ([i915#4525]) +2 other tests skip
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-5/igt@gem_exec_balancer@parallel-keep-submit-fence.html

  * igt@gem_exec_capture@capture@vecs0-lmem0:
    - shard-dg1:          NOTRUN -> [FAIL][36] ([i915#10386]) +1 other test fail
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-17/igt@gem_exec_capture@capture@vecs0-lmem0.html

  * igt@gem_exec_capture@many-4k-incremental:
    - shard-dg2:          NOTRUN -> [FAIL][37] ([i915#9606])
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-5/igt@gem_exec_capture@many-4k-incremental.html
    - shard-tglu:         NOTRUN -> [FAIL][38] ([i915#9606])
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-tglu-9/igt@gem_exec_capture@many-4k-incremental.html

  * igt@gem_exec_capture@many-4k-zero:
    - shard-rkl:          NOTRUN -> [FAIL][39] ([i915#9606])
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-5/igt@gem_exec_capture@many-4k-zero.html

  * igt@gem_exec_fair@basic-none-rrul:
    - shard-dg1:          NOTRUN -> [SKIP][40] ([i915#3539] / [i915#4852]) +3 other tests skip
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-18/igt@gem_exec_fair@basic-none-rrul.html

  * igt@gem_exec_fair@basic-pace:
    - shard-mtlp:         NOTRUN -> [SKIP][41] ([i915#4473] / [i915#4771])
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-5/igt@gem_exec_fair@basic-pace.html

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

  * igt@gem_exec_fair@basic-pace-solo@rcs0:
    - shard-tglu:         [PASS][43] -> [FAIL][44] ([i915#2842])
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7800/shard-tglu-6/igt@gem_exec_fair@basic-pace-solo@rcs0.html
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-tglu-7/igt@gem_exec_fair@basic-pace-solo@rcs0.html

  * igt@gem_exec_fence@submit:
    - shard-mtlp:         NOTRUN -> [SKIP][45] ([i915#4812]) +3 other tests skip
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-1/igt@gem_exec_fence@submit.html

  * igt@gem_exec_flush@basic-batch-kernel-default-cmd:
    - shard-dg2:          NOTRUN -> [SKIP][46] ([i915#3539] / [i915#4852]) +4 other tests skip
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-7/igt@gem_exec_flush@basic-batch-kernel-default-cmd.html
    - shard-mtlp:         NOTRUN -> [SKIP][47] ([i915#3711])
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-2/igt@gem_exec_flush@basic-batch-kernel-default-cmd.html

  * igt@gem_exec_reloc@basic-concurrent0:
    - shard-dg1:          NOTRUN -> [SKIP][48] ([i915#3281]) +17 other tests skip
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-16/igt@gem_exec_reloc@basic-concurrent0.html

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

  * igt@gem_exec_reloc@basic-write-read-noreloc:
    - shard-rkl:          NOTRUN -> [SKIP][50] ([i915#3281]) +7 other tests skip
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-5/igt@gem_exec_reloc@basic-write-read-noreloc.html

  * igt@gem_exec_schedule@preempt-queue:
    - shard-dg1:          NOTRUN -> [SKIP][51] ([i915#4812]) +3 other tests skip
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-14/igt@gem_exec_schedule@preempt-queue.html

  * igt@gem_exec_schedule@preempt-queue-contexts-chain:
    - shard-mtlp:         NOTRUN -> [SKIP][52] ([i915#4537] / [i915#4812])
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-5/igt@gem_exec_schedule@preempt-queue-contexts-chain.html

  * igt@gem_fence_thrash@bo-write-verify-y:
    - shard-dg1:          NOTRUN -> [SKIP][53] ([i915#4860]) +2 other tests skip
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-18/igt@gem_fence_thrash@bo-write-verify-y.html

  * igt@gem_fenced_exec_thrash@no-spare-fences-busy:
    - shard-dg2:          NOTRUN -> [SKIP][54] ([i915#4860])
   [54]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-2/igt@gem_fenced_exec_thrash@no-spare-fences-busy.html

  * igt@gem_lmem_swapping@heavy-verify-multi-ccs:
    - shard-mtlp:         NOTRUN -> [SKIP][55] ([i915#4613]) +4 other tests skip
   [55]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-5/igt@gem_lmem_swapping@heavy-verify-multi-ccs.html

  * igt@gem_lmem_swapping@heavy-verify-multi@lmem0:
    - shard-dg2:          [PASS][56] -> [FAIL][57] ([i915#10378])
   [56]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7800/shard-dg2-6/igt@gem_lmem_swapping@heavy-verify-multi@lmem0.html
   [57]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-10/igt@gem_lmem_swapping@heavy-verify-multi@lmem0.html

  * igt@gem_lmem_swapping@heavy-verify-random:
    - shard-tglu:         NOTRUN -> [SKIP][58] ([i915#4613])
   [58]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-tglu-6/igt@gem_lmem_swapping@heavy-verify-random.html

  * igt@gem_lmem_swapping@heavy-verify-random-ccs@lmem0:
    - shard-dg1:          NOTRUN -> [SKIP][59] ([i915#4565]) +1 other test skip
   [59]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-18/igt@gem_lmem_swapping@heavy-verify-random-ccs@lmem0.html

  * igt@gem_lmem_swapping@heavy-verify-random@lmem0:
    - shard-dg1:          NOTRUN -> [FAIL][60] ([i915#10378])
   [60]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-16/igt@gem_lmem_swapping@heavy-verify-random@lmem0.html

  * igt@gem_lmem_swapping@massive:
    - shard-rkl:          NOTRUN -> [SKIP][61] ([i915#4613]) +1 other test skip
   [61]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-5/igt@gem_lmem_swapping@massive.html

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

  * igt@gem_madvise@dontneed-before-pwrite:
    - shard-dg2:          NOTRUN -> [SKIP][63] ([i915#3282]) +4 other tests skip
   [63]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-2/igt@gem_madvise@dontneed-before-pwrite.html

  * igt@gem_media_fill@media-fill:
    - shard-dg2:          NOTRUN -> [SKIP][64] ([i915#8289])
   [64]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-7/igt@gem_media_fill@media-fill.html

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

  * igt@gem_mmap_gtt@big-bo-tiledy:
    - shard-mtlp:         NOTRUN -> [SKIP][66] ([i915#4077]) +5 other tests skip
   [66]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-7/igt@gem_mmap_gtt@big-bo-tiledy.html

  * igt@gem_mmap_gtt@coherency:
    - shard-dg1:          NOTRUN -> [SKIP][67] ([i915#4077]) +11 other tests skip
   [67]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-17/igt@gem_mmap_gtt@coherency.html

  * igt@gem_mmap_gtt@cpuset-medium-copy-xy:
    - shard-dg2:          NOTRUN -> [SKIP][68] ([i915#4077]) +10 other tests skip
   [68]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-5/igt@gem_mmap_gtt@cpuset-medium-copy-xy.html

  * igt@gem_mmap_wc@fault-concurrent:
    - shard-dg2:          NOTRUN -> [SKIP][69] ([i915#4083]) +6 other tests skip
   [69]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-7/igt@gem_mmap_wc@fault-concurrent.html

  * igt@gem_mmap_wc@invalid-flags:
    - shard-dg1:          NOTRUN -> [SKIP][70] ([i915#4083]) +6 other tests skip
   [70]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-17/igt@gem_mmap_wc@invalid-flags.html

  * igt@gem_mmap_wc@write-prefaulted:
    - shard-mtlp:         NOTRUN -> [SKIP][71] ([i915#4083]) +1 other test skip
   [71]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-5/igt@gem_mmap_wc@write-prefaulted.html

  * igt@gem_pwrite@basic-self:
    - shard-dg1:          NOTRUN -> [SKIP][72] ([i915#3282]) +9 other tests skip
   [72]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-16/igt@gem_pwrite@basic-self.html

  * igt@gem_pwrite_snooped:
    - shard-rkl:          NOTRUN -> [SKIP][73] ([i915#3282]) +5 other tests skip
   [73]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-5/igt@gem_pwrite_snooped.html

  * igt@gem_pxp@create-regular-context-2:
    - shard-rkl:          NOTRUN -> [SKIP][74] ([i915#4270])
   [74]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-1/igt@gem_pxp@create-regular-context-2.html

  * igt@gem_pxp@dmabuf-shared-protected-dst-is-context-refcounted:
    - shard-tglu:         NOTRUN -> [SKIP][75] ([i915#4270])
   [75]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-tglu-9/igt@gem_pxp@dmabuf-shared-protected-dst-is-context-refcounted.html

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

  * igt@gem_pxp@protected-raw-src-copy-not-readible:
    - shard-dg2:          NOTRUN -> [SKIP][77] ([i915#4270]) +3 other tests skip
   [77]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-2/igt@gem_pxp@protected-raw-src-copy-not-readible.html

  * igt@gem_pxp@verify-pxp-stale-buf-execution:
    - shard-mtlp:         NOTRUN -> [SKIP][78] ([i915#4270]) +4 other tests skip
   [78]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-5/igt@gem_pxp@verify-pxp-stale-buf-execution.html

  * igt@gem_readwrite@read-bad-handle:
    - shard-mtlp:         NOTRUN -> [SKIP][79] ([i915#3282]) +2 other tests skip
   [79]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-7/igt@gem_readwrite@read-bad-handle.html

  * igt@gem_render_copy@yf-tiled-ccs-to-yf-tiled:
    - shard-mtlp:         NOTRUN -> [SKIP][80] ([i915#8428]) +3 other tests skip
   [80]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-4/igt@gem_render_copy@yf-tiled-ccs-to-yf-tiled.html

  * igt@gem_render_copy@yf-tiled-mc-ccs-to-vebox-y-tiled:
    - shard-dg2:          NOTRUN -> [SKIP][81] ([i915#5190] / [i915#8428]) +5 other tests skip
   [81]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-7/igt@gem_render_copy@yf-tiled-mc-ccs-to-vebox-y-tiled.html

  * igt@gem_set_tiling_vs_blt@tiled-to-tiled:
    - shard-mtlp:         NOTRUN -> [SKIP][82] ([i915#4079])
   [82]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-2/igt@gem_set_tiling_vs_blt@tiled-to-tiled.html

  * igt@gem_set_tiling_vs_blt@tiled-to-untiled:
    - shard-dg1:          NOTRUN -> [SKIP][83] ([i915#4079]) +1 other test skip
   [83]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-13/igt@gem_set_tiling_vs_blt@tiled-to-untiled.html

  * igt@gem_set_tiling_vs_blt@untiled-to-tiled:
    - shard-dg2:          NOTRUN -> [SKIP][84] ([i915#4079]) +2 other tests skip
   [84]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-8/igt@gem_set_tiling_vs_blt@untiled-to-tiled.html
    - shard-rkl:          NOTRUN -> [SKIP][85] ([i915#8411])
   [85]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-4/igt@gem_set_tiling_vs_blt@untiled-to-tiled.html

  * igt@gem_softpin@evict-snoop-interruptible:
    - shard-dg2:          NOTRUN -> [SKIP][86] ([i915#4885]) +1 other test skip
   [86]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-10/igt@gem_softpin@evict-snoop-interruptible.html

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

  * igt@gem_unfence_active_buffers:
    - shard-dg1:          NOTRUN -> [SKIP][88] ([i915#4879])
   [88]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-15/igt@gem_unfence_active_buffers.html
    - shard-dg2:          NOTRUN -> [SKIP][89] ([i915#4879])
   [89]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-8/igt@gem_unfence_active_buffers.html

  * igt@gem_userptr_blits@dmabuf-sync:
    - shard-glk:          NOTRUN -> [SKIP][90] ([i915#3323])
   [90]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-glk5/igt@gem_userptr_blits@dmabuf-sync.html

  * igt@gem_userptr_blits@dmabuf-unsync:
    - shard-dg2:          NOTRUN -> [SKIP][91] ([i915#3297]) +1 other test skip
   [91]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-7/igt@gem_userptr_blits@dmabuf-unsync.html

  * igt@gem_userptr_blits@map-fixed-invalidate-busy:
    - shard-mtlp:         NOTRUN -> [SKIP][92] ([i915#3297]) +2 other tests skip
   [92]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-3/igt@gem_userptr_blits@map-fixed-invalidate-busy.html

  * igt@gem_userptr_blits@relocations:
    - shard-mtlp:         NOTRUN -> [SKIP][93] ([i915#3281]) +5 other tests skip
   [93]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-7/igt@gem_userptr_blits@relocations.html

  * igt@gem_userptr_blits@unsync-unmap:
    - shard-rkl:          NOTRUN -> [SKIP][94] ([i915#3297]) +2 other tests skip
   [94]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-3/igt@gem_userptr_blits@unsync-unmap.html

  * igt@gem_userptr_blits@unsync-unmap-after-close:
    - shard-dg1:          NOTRUN -> [SKIP][95] ([i915#3297]) +1 other test skip
   [95]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-16/igt@gem_userptr_blits@unsync-unmap-after-close.html

  * igt@gen9_exec_parse@batch-zero-length:
    - shard-mtlp:         NOTRUN -> [SKIP][96] ([i915#2856]) +1 other test skip
   [96]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-7/igt@gen9_exec_parse@batch-zero-length.html

  * igt@gen9_exec_parse@bb-large:
    - shard-dg1:          NOTRUN -> [SKIP][97] ([i915#2527]) +4 other tests skip
   [97]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-13/igt@gen9_exec_parse@bb-large.html

  * igt@gen9_exec_parse@bb-start-far:
    - shard-dg2:          NOTRUN -> [SKIP][98] ([i915#2856]) +2 other tests skip
   [98]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-10/igt@gen9_exec_parse@bb-start-far.html
    - shard-rkl:          NOTRUN -> [SKIP][99] ([i915#2527]) +3 other tests skip
   [99]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-5/igt@gen9_exec_parse@bb-start-far.html

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

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

  * igt@i915_module_load@load:
    - shard-dg2:          NOTRUN -> [SKIP][102] ([i915#6227])
   [102]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-7/igt@i915_module_load@load.html
    - shard-rkl:          NOTRUN -> [SKIP][103] ([i915#6227])
   [103]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-4/igt@i915_module_load@load.html

  * igt@i915_module_load@reload-with-fault-injection:
    - shard-dg1:          NOTRUN -> [ABORT][104] ([i915#9820])
   [104]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-13/igt@i915_module_load@reload-with-fault-injection.html
    - shard-dg2:          [PASS][105] -> [ABORT][106] ([i915#9820])
   [105]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7800/shard-dg2-8/igt@i915_module_load@reload-with-fault-injection.html
   [106]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-8/igt@i915_module_load@reload-with-fault-injection.html

  * igt@i915_module_load@resize-bar:
    - shard-dg1:          NOTRUN -> [SKIP][107] ([i915#7178])
   [107]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-17/igt@i915_module_load@resize-bar.html

  * igt@i915_pm_freq_api@freq-reset:
    - shard-tglu:         NOTRUN -> [SKIP][108] ([i915#8399])
   [108]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-tglu-3/igt@i915_pm_freq_api@freq-reset.html

  * igt@i915_pm_freq_api@freq-reset-multiple:
    - shard-rkl:          NOTRUN -> [SKIP][109] ([i915#8399])
   [109]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-5/igt@i915_pm_freq_api@freq-reset-multiple.html

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

  * igt@i915_pm_rps@reset:
    - shard-snb:          [PASS][111] -> [INCOMPLETE][112] ([i915#7790])
   [111]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7800/shard-snb2/igt@i915_pm_rps@reset.html
   [112]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-snb6/igt@i915_pm_rps@reset.html

  * igt@i915_pm_rps@thresholds-idle@gt0:
    - shard-dg1:          NOTRUN -> [SKIP][113] ([i915#8925])
   [113]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-17/igt@i915_pm_rps@thresholds-idle@gt0.html

  * igt@i915_pm_rps@thresholds-park@gt0:
    - shard-mtlp:         NOTRUN -> [SKIP][114] ([i915#8925])
   [114]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-3/igt@i915_pm_rps@thresholds-park@gt0.html
    - shard-dg2:          NOTRUN -> [SKIP][115] ([i915#8925])
   [115]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-2/igt@i915_pm_rps@thresholds-park@gt0.html

  * igt@i915_pm_rps@thresholds-park@gt1:
    - shard-mtlp:         NOTRUN -> [SKIP][116] ([i915#3555] / [i915#8925])
   [116]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-3/igt@i915_pm_rps@thresholds-park@gt1.html

  * igt@i915_query@query-topology-coherent-slice-mask:
    - shard-mtlp:         NOTRUN -> [SKIP][117] ([i915#6188])
   [117]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-5/igt@i915_query@query-topology-coherent-slice-mask.html

  * igt@i915_selftest@mock@memory_region:
    - shard-snb:          NOTRUN -> [DMESG-WARN][118] ([i915#9311])
   [118]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-snb6/igt@i915_selftest@mock@memory_region.html
    - shard-glk:          NOTRUN -> [DMESG-WARN][119] ([i915#9311])
   [119]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-glk9/igt@i915_selftest@mock@memory_region.html

  * igt@i915_suspend@basic-s3-without-i915:
    - shard-rkl:          [PASS][120] -> [INCOMPLETE][121] ([i915#4817])
   [120]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7800/shard-rkl-4/igt@i915_suspend@basic-s3-without-i915.html
   [121]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-3/igt@i915_suspend@basic-s3-without-i915.html
    - shard-tglu:         NOTRUN -> [INCOMPLETE][122] ([i915#7443])
   [122]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-tglu-5/igt@i915_suspend@basic-s3-without-i915.html

  * igt@kms_addfb_basic@framebuffer-vs-set-tiling:
    - shard-dg1:          NOTRUN -> [SKIP][123] ([i915#4212])
   [123]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-15/igt@kms_addfb_basic@framebuffer-vs-set-tiling.html

  * igt@kms_addfb_basic@invalid-smem-bo-on-discrete:
    - shard-mtlp:         NOTRUN -> [SKIP][124] ([i915#3826])
   [124]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-3/igt@kms_addfb_basic@invalid-smem-bo-on-discrete.html
    - shard-rkl:          NOTRUN -> [SKIP][125] ([i915#3826])
   [125]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-6/igt@kms_addfb_basic@invalid-smem-bo-on-discrete.html

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

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

  * igt@kms_big_fb@4-tiled-64bpp-rotate-90:
    - shard-dg1:          NOTRUN -> [SKIP][128] ([i915#4538] / [i915#5286]) +6 other tests skip
   [128]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-16/igt@kms_big_fb@4-tiled-64bpp-rotate-90.html

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

  * igt@kms_big_fb@4-tiled-addfb-size-overflow:
    - shard-dg1:          NOTRUN -> [SKIP][130] ([i915#5286]) +1 other test skip
   [130]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-15/igt@kms_big_fb@4-tiled-addfb-size-overflow.html

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

  * igt@kms_big_fb@x-tiled-32bpp-rotate-270:
    - shard-rkl:          NOTRUN -> [SKIP][132] ([i915#3638]) +5 other tests skip
   [132]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-2/igt@kms_big_fb@x-tiled-32bpp-rotate-270.html

  * igt@kms_big_fb@y-tiled-8bpp-rotate-180:
    - shard-dg2:          NOTRUN -> [SKIP][133] ([i915#4538] / [i915#5190]) +12 other tests skip
   [133]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-7/igt@kms_big_fb@y-tiled-8bpp-rotate-180.html

  * igt@kms_big_fb@y-tiled-8bpp-rotate-270:
    - shard-dg1:          NOTRUN -> [SKIP][134] ([i915#3638]) +3 other tests skip
   [134]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-13/igt@kms_big_fb@y-tiled-8bpp-rotate-270.html

  * igt@kms_big_fb@y-tiled-addfb-size-overflow:
    - shard-mtlp:         NOTRUN -> [SKIP][135] ([i915#6187]) +1 other test skip
   [135]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-4/igt@kms_big_fb@y-tiled-addfb-size-overflow.html

  * igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-0-async-flip:
    - shard-mtlp:         NOTRUN -> [SKIP][136] +13 other tests skip
   [136]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-7/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-0-async-flip.html

  * igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-async-flip:
    - shard-tglu:         [PASS][137] -> [FAIL][138] ([i915#3743])
   [137]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7800/shard-tglu-4/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html
   [138]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-tglu-8/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html

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

  * igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-0-hflip:
    - shard-snb:          NOTRUN -> [SKIP][140] +39 other tests skip
   [140]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-snb7/igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-0-hflip.html

  * igt@kms_big_joiner@basic:
    - shard-rkl:          NOTRUN -> [SKIP][141] ([i915#10656])
   [141]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-2/igt@kms_big_joiner@basic.html

  * igt@kms_big_joiner@invalid-modeset:
    - shard-mtlp:         NOTRUN -> [SKIP][142] ([i915#10656])
   [142]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-2/igt@kms_big_joiner@invalid-modeset.html

  * igt@kms_ccs@bad-aux-stride-y-tiled-gen12-rc-ccs@pipe-d-hdmi-a-1:
    - shard-dg2:          NOTRUN -> [SKIP][143] ([i915#10307] / [i915#10434] / [i915#6095]) +4 other tests skip
   [143]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-10/igt@kms_ccs@bad-aux-stride-y-tiled-gen12-rc-ccs@pipe-d-hdmi-a-1.html

  * igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-rc-ccs@pipe-b-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [SKIP][144] ([i915#6095]) +55 other tests skip
   [144]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-6/igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-rc-ccs@pipe-b-hdmi-a-2.html

  * igt@kms_ccs@crc-primary-rotation-180-4-tiled-xe2-ccs:
    - shard-dg2:          NOTRUN -> [SKIP][145] ([i915#10278])
   [145]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-7/igt@kms_ccs@crc-primary-rotation-180-4-tiled-xe2-ccs.html
    - shard-mtlp:         NOTRUN -> [SKIP][146] ([i915#10278])
   [146]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-1/igt@kms_ccs@crc-primary-rotation-180-4-tiled-xe2-ccs.html

  * igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-mc-ccs@pipe-a-hdmi-a-3:
    - shard-dg2:          NOTRUN -> [SKIP][147] ([i915#10307] / [i915#6095]) +170 other tests skip
   [147]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-6/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-mc-ccs@pipe-a-hdmi-a-3.html

  * igt@kms_ccs@crc-sprite-planes-basic-y-tiled-ccs@pipe-b-hdmi-a-1:
    - shard-tglu:         NOTRUN -> [SKIP][148] ([i915#6095]) +31 other tests skip
   [148]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-tglu-2/igt@kms_ccs@crc-sprite-planes-basic-y-tiled-ccs@pipe-b-hdmi-a-1.html

  * igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs-cc@pipe-b-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][149] ([i915#6095]) +35 other tests skip
   [149]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-4/igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs-cc@pipe-b-edp-1.html

  * igt@kms_ccs@random-ccs-data-4-tiled-xe2-ccs:
    - shard-dg1:          NOTRUN -> [SKIP][150] ([i915#10278])
   [150]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-18/igt@kms_ccs@random-ccs-data-4-tiled-xe2-ccs.html

  * igt@kms_ccs@random-ccs-data-yf-tiled-ccs@pipe-a-hdmi-a-3:
    - shard-dg1:          NOTRUN -> [SKIP][151] ([i915#6095]) +91 other tests skip
   [151]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-13/igt@kms_ccs@random-ccs-data-yf-tiled-ccs@pipe-a-hdmi-a-3.html

  * igt@kms_cdclk@mode-transition:
    - shard-tglu:         NOTRUN -> [SKIP][152] ([i915#3742])
   [152]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-tglu-7/igt@kms_cdclk@mode-transition.html

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

  * igt@kms_cdclk@plane-scaling@pipe-d-hdmi-a-1:
    - shard-dg2:          NOTRUN -> [SKIP][154] ([i915#4087]) +3 other tests skip
   [154]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-8/igt@kms_cdclk@plane-scaling@pipe-d-hdmi-a-1.html

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

  * igt@kms_chamelium_color@degamma:
    - shard-dg2:          NOTRUN -> [SKIP][156] +23 other tests skip
   [156]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-5/igt@kms_chamelium_color@degamma.html

  * igt@kms_chamelium_edid@dp-mode-timings:
    - shard-mtlp:         NOTRUN -> [SKIP][157] ([i915#7828]) +7 other tests skip
   [157]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-4/igt@kms_chamelium_edid@dp-mode-timings.html

  * igt@kms_chamelium_hpd@dp-hpd-enable-disable-mode:
    - shard-rkl:          NOTRUN -> [SKIP][158] ([i915#7828]) +10 other tests skip
   [158]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-5/igt@kms_chamelium_hpd@dp-hpd-enable-disable-mode.html

  * igt@kms_chamelium_hpd@hdmi-hpd-for-each-pipe:
    - shard-tglu:         NOTRUN -> [SKIP][159] ([i915#7828]) +3 other tests skip
   [159]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-tglu-9/igt@kms_chamelium_hpd@hdmi-hpd-for-each-pipe.html

  * igt@kms_chamelium_hpd@hdmi-hpd-storm-disable:
    - shard-dg1:          NOTRUN -> [SKIP][160] ([i915#7828]) +10 other tests skip
   [160]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-17/igt@kms_chamelium_hpd@hdmi-hpd-storm-disable.html

  * igt@kms_content_protection@atomic-dpms:
    - shard-mtlp:         NOTRUN -> [SKIP][161] ([i915#6944] / [i915#9424]) +2 other tests skip
   [161]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-2/igt@kms_content_protection@atomic-dpms.html
    - shard-rkl:          NOTRUN -> [SKIP][162] ([i915#7118] / [i915#9424])
   [162]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-5/igt@kms_content_protection@atomic-dpms.html

  * igt@kms_content_protection@atomic@pipe-a-dp-4:
    - shard-dg2:          NOTRUN -> [TIMEOUT][163] ([i915#7173])
   [163]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-11/igt@kms_content_protection@atomic@pipe-a-dp-4.html

  * igt@kms_content_protection@content-type-change:
    - shard-tglu:         NOTRUN -> [SKIP][164] ([i915#6944] / [i915#9424])
   [164]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-tglu-3/igt@kms_content_protection@content-type-change.html

  * igt@kms_content_protection@dp-mst-lic-type-0:
    - shard-mtlp:         NOTRUN -> [SKIP][165] ([i915#3299])
   [165]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-3/igt@kms_content_protection@dp-mst-lic-type-0.html
    - shard-dg2:          NOTRUN -> [SKIP][166] ([i915#3299])
   [166]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-2/igt@kms_content_protection@dp-mst-lic-type-0.html

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

  * igt@kms_content_protection@legacy:
    - shard-dg2:          NOTRUN -> [SKIP][168] ([i915#7118] / [i915#9424])
   [168]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-5/igt@kms_content_protection@legacy.html

  * igt@kms_content_protection@lic-type-0:
    - shard-dg2:          NOTRUN -> [SKIP][169] ([i915#9424]) +1 other test skip
   [169]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-8/igt@kms_content_protection@lic-type-0.html
    - shard-rkl:          NOTRUN -> [SKIP][170] ([i915#9424]) +1 other test skip
   [170]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-2/igt@kms_content_protection@lic-type-0.html

  * igt@kms_content_protection@mei-interface:
    - shard-dg1:          NOTRUN -> [SKIP][171] ([i915#9424]) +1 other test skip
   [171]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-16/igt@kms_content_protection@mei-interface.html

  * igt@kms_content_protection@type1:
    - shard-mtlp:         NOTRUN -> [SKIP][172] ([i915#3555] / [i915#6944] / [i915#9424])
   [172]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-7/igt@kms_content_protection@type1.html

  * igt@kms_cursor_crc@cursor-offscreen-32x10:
    - shard-tglu:         NOTRUN -> [SKIP][173] ([i915#3555])
   [173]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-tglu-9/igt@kms_cursor_crc@cursor-offscreen-32x10.html

  * igt@kms_cursor_crc@cursor-onscreen-32x10:
    - shard-mtlp:         NOTRUN -> [SKIP][174] ([i915#3555] / [i915#8814]) +1 other test skip
   [174]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-5/igt@kms_cursor_crc@cursor-onscreen-32x10.html

  * igt@kms_cursor_crc@cursor-onscreen-32x32:
    - shard-dg1:          NOTRUN -> [SKIP][175] ([i915#3555]) +9 other tests skip
   [175]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-16/igt@kms_cursor_crc@cursor-onscreen-32x32.html

  * igt@kms_cursor_crc@cursor-onscreen-512x170:
    - shard-dg2:          NOTRUN -> [SKIP][176] ([i915#3359]) +3 other tests skip
   [176]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-8/igt@kms_cursor_crc@cursor-onscreen-512x170.html
    - shard-rkl:          NOTRUN -> [SKIP][177] ([i915#3359]) +1 other test skip
   [177]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-4/igt@kms_cursor_crc@cursor-onscreen-512x170.html

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

  * igt@kms_cursor_crc@cursor-rapid-movement-512x170:
    - shard-tglu:         NOTRUN -> [SKIP][179] ([i915#3359]) +1 other test skip
   [179]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-tglu-9/igt@kms_cursor_crc@cursor-rapid-movement-512x170.html

  * igt@kms_cursor_crc@cursor-rapid-movement-512x512:
    - shard-mtlp:         NOTRUN -> [SKIP][180] ([i915#3359]) +1 other test skip
   [180]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-7/igt@kms_cursor_crc@cursor-rapid-movement-512x512.html

  * igt@kms_cursor_crc@cursor-rapid-movement-max-size:
    - shard-dg2:          NOTRUN -> [SKIP][181] ([i915#3555]) +3 other tests skip
   [181]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-5/igt@kms_cursor_crc@cursor-rapid-movement-max-size.html

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

  * igt@kms_cursor_crc@cursor-sliding-64x21:
    - shard-mtlp:         NOTRUN -> [SKIP][183] ([i915#8814]) +1 other test skip
   [183]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-2/igt@kms_cursor_crc@cursor-sliding-64x21.html

  * igt@kms_cursor_legacy@2x-nonblocking-modeset-vs-cursor-atomic:
    - shard-mtlp:         NOTRUN -> [SKIP][184] ([i915#9809]) +1 other test skip
   [184]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-3/igt@kms_cursor_legacy@2x-nonblocking-modeset-vs-cursor-atomic.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy:
    - shard-dg1:          NOTRUN -> [SKIP][185] ([i915#4103] / [i915#4213])
   [185]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-16/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html

  * igt@kms_cursor_legacy@modeset-atomic-cursor-hotspot:
    - shard-dg1:          NOTRUN -> [SKIP][186] ([i915#9067])
   [186]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-16/igt@kms_cursor_legacy@modeset-atomic-cursor-hotspot.html

  * igt@kms_cursor_legacy@short-busy-flip-before-cursor-toggle:
    - shard-mtlp:         NOTRUN -> [SKIP][187] ([i915#4213])
   [187]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-5/igt@kms_cursor_legacy@short-busy-flip-before-cursor-toggle.html
    - shard-rkl:          NOTRUN -> [SKIP][188] ([i915#4103]) +1 other test skip
   [188]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-5/igt@kms_cursor_legacy@short-busy-flip-before-cursor-toggle.html

  * igt@kms_dirtyfb@fbc-dirtyfb-ioctl@a-hdmi-a-1:
    - shard-tglu:         NOTRUN -> [SKIP][189] ([i915#9723])
   [189]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-tglu-2/igt@kms_dirtyfb@fbc-dirtyfb-ioctl@a-hdmi-a-1.html

  * igt@kms_dirtyfb@fbc-dirtyfb-ioctl@a-hdmi-a-4:
    - shard-dg1:          NOTRUN -> [SKIP][190] ([i915#9723])
   [190]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-18/igt@kms_dirtyfb@fbc-dirtyfb-ioctl@a-hdmi-a-4.html

  * igt@kms_draw_crc@draw-method-mmap-gtt:
    - shard-dg1:          NOTRUN -> [SKIP][191] ([i915#8812]) +1 other test skip
   [191]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-15/igt@kms_draw_crc@draw-method-mmap-gtt.html

  * igt@kms_dsc@dsc-fractional-bpp-with-bpc:
    - shard-tglu:         NOTRUN -> [SKIP][192] ([i915#3840])
   [192]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-tglu-8/igt@kms_dsc@dsc-fractional-bpp-with-bpc.html

  * igt@kms_dsc@dsc-with-bpc:
    - shard-dg2:          NOTRUN -> [SKIP][193] ([i915#3555] / [i915#3840])
   [193]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-5/igt@kms_dsc@dsc-with-bpc.html
    - shard-rkl:          NOTRUN -> [SKIP][194] ([i915#3555] / [i915#3840])
   [194]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-3/igt@kms_dsc@dsc-with-bpc.html

  * igt@kms_dsc@dsc-with-bpc-formats:
    - shard-dg1:          NOTRUN -> [SKIP][195] ([i915#3555] / [i915#3840])
   [195]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-14/igt@kms_dsc@dsc-with-bpc-formats.html

  * igt@kms_dsc@dsc-with-output-formats-with-bpc:
    - shard-dg1:          NOTRUN -> [SKIP][196] ([i915#3840] / [i915#9053])
   [196]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-15/igt@kms_dsc@dsc-with-output-formats-with-bpc.html

  * igt@kms_fbcon_fbt@psr:
    - shard-dg1:          NOTRUN -> [SKIP][197] ([i915#3469])
   [197]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-18/igt@kms_fbcon_fbt@psr.html

  * igt@kms_feature_discovery@chamelium:
    - shard-dg2:          NOTRUN -> [SKIP][198] ([i915#4854])
   [198]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-7/igt@kms_feature_discovery@chamelium.html
    - shard-dg1:          NOTRUN -> [SKIP][199] ([i915#4854])
   [199]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-18/igt@kms_feature_discovery@chamelium.html

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

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

  * igt@kms_feature_discovery@dp-mst:
    - shard-dg2:          NOTRUN -> [SKIP][202] ([i915#9337])
   [202]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-8/igt@kms_feature_discovery@dp-mst.html
    - shard-tglu:         NOTRUN -> [SKIP][203] ([i915#9337])
   [203]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-tglu-6/igt@kms_feature_discovery@dp-mst.html

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

  * igt@kms_fence_pin_leak:
    - shard-dg2:          NOTRUN -> [SKIP][205] ([i915#4881])
   [205]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-6/igt@kms_fence_pin_leak.html

  * igt@kms_flip@2x-blocking-wf_vblank@ab-vga1-hdmi-a1:
    - shard-snb:          [PASS][206] -> [FAIL][207] ([i915#2122])
   [206]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7800/shard-snb1/igt@kms_flip@2x-blocking-wf_vblank@ab-vga1-hdmi-a1.html
   [207]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-snb7/igt@kms_flip@2x-blocking-wf_vblank@ab-vga1-hdmi-a1.html

  * igt@kms_flip@2x-flip-vs-absolute-wf_vblank:
    - shard-tglu:         NOTRUN -> [SKIP][208] ([i915#3637]) +1 other test skip
   [208]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-tglu-7/igt@kms_flip@2x-flip-vs-absolute-wf_vblank.html

  * igt@kms_flip@2x-flip-vs-suspend-interruptible:
    - shard-mtlp:         NOTRUN -> [SKIP][209] ([i915#3637]) +2 other tests skip
   [209]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-3/igt@kms_flip@2x-flip-vs-suspend-interruptible.html

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

  * igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-32bpp-4tiledg2rcccs-downscaling@pipe-a-default-mode:
    - shard-mtlp:         NOTRUN -> [SKIP][211] ([i915#2672])
   [211]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-7/igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-32bpp-4tiledg2rcccs-downscaling@pipe-a-default-mode.html

  * igt@kms_flip_scaled_crc@flip-32bpp-linear-to-64bpp-linear-downscaling@pipe-a-default-mode:
    - shard-mtlp:         NOTRUN -> [SKIP][212] ([i915#3555] / [i915#8810])
   [212]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-1/igt@kms_flip_scaled_crc@flip-32bpp-linear-to-64bpp-linear-downscaling@pipe-a-default-mode.html

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

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

  * igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-downscaling@pipe-a-valid-mode:
    - shard-dg2:          NOTRUN -> [SKIP][215] ([i915#2672]) +3 other tests skip
   [215]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-11/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-downscaling@pipe-a-valid-mode.html

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

  * igt@kms_force_connector_basic@prune-stale-modes:
    - shard-mtlp:         NOTRUN -> [SKIP][217] ([i915#5274])
   [217]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-7/igt@kms_force_connector_basic@prune-stale-modes.html

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-shrfb-draw-mmap-cpu:
    - shard-dg2:          [PASS][218] -> [FAIL][219] ([i915#6880])
   [218]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7800/shard-dg2-5/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-shrfb-draw-mmap-cpu.html
   [219]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-6/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-shrfb-draw-mmap-cpu.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-indfb-draw-mmap-gtt:
    - shard-mtlp:         NOTRUN -> [SKIP][220] ([i915#8708]) +10 other tests skip
   [220]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-1/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-indfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-indfb-draw-mmap-wc:
    - shard-dg1:          NOTRUN -> [SKIP][221] ([i915#8708]) +30 other tests skip
   [221]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-14/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-onoff:
    - shard-mtlp:         NOTRUN -> [SKIP][222] ([i915#1825]) +25 other tests skip
   [222]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-1/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-onoff.html

  * igt@kms_frontbuffer_tracking@fbc-2p-rte:
    - shard-dg2:          NOTRUN -> [SKIP][223] ([i915#5354]) +45 other tests skip
   [223]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-7/igt@kms_frontbuffer_tracking@fbc-2p-rte.html

  * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-cur-indfb-draw-mmap-wc:
    - shard-dg2:          NOTRUN -> [SKIP][224] ([i915#8708]) +13 other tests skip
   [224]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-5/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-cur-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-shrfb-pgflip-blt:
    - shard-dg1:          NOTRUN -> [SKIP][225] +63 other tests skip
   [225]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-18/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-shrfb-pgflip-blt.html

  * igt@kms_frontbuffer_tracking@fbc-tiling-4:
    - shard-dg1:          NOTRUN -> [SKIP][226] ([i915#5439]) +1 other test skip
   [226]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-13/igt@kms_frontbuffer_tracking@fbc-tiling-4.html

  * igt@kms_frontbuffer_tracking@fbc-tiling-y:
    - shard-mtlp:         NOTRUN -> [SKIP][227] ([i915#10055])
   [227]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-1/igt@kms_frontbuffer_tracking@fbc-tiling-y.html
    - shard-dg2:          NOTRUN -> [SKIP][228] ([i915#10055])
   [228]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-6/igt@kms_frontbuffer_tracking@fbc-tiling-y.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-shrfb-pgflip-blt:
    - shard-rkl:          NOTRUN -> [SKIP][229] ([i915#1825]) +34 other tests skip
   [229]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-5/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-shrfb-pgflip-blt.html

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

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

  * igt@kms_frontbuffer_tracking@plane-fbc-rte:
    - shard-dg2:          NOTRUN -> [SKIP][232] ([i915#10070])
   [232]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-11/igt@kms_frontbuffer_tracking@plane-fbc-rte.html
    - shard-rkl:          NOTRUN -> [SKIP][233] ([i915#10070])
   [233]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-6/igt@kms_frontbuffer_tracking@plane-fbc-rte.html

  * igt@kms_frontbuffer_tracking@psr-1p-pri-indfb-multidraw:
    - shard-glk:          NOTRUN -> [SKIP][234] +366 other tests skip
   [234]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-glk7/igt@kms_frontbuffer_tracking@psr-1p-pri-indfb-multidraw.html

  * igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-move:
    - shard-dg2:          NOTRUN -> [SKIP][235] ([i915#3458]) +21 other tests skip
   [235]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-6/igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-move.html

  * igt@kms_frontbuffer_tracking@psr-2p-scndscrn-pri-shrfb-draw-mmap-wc:
    - shard-tglu:         NOTRUN -> [SKIP][236] +51 other tests skip
   [236]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-tglu-9/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-pri-shrfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@psr-modesetfrombusy:
    - shard-rkl:          NOTRUN -> [SKIP][237] ([i915#3023]) +21 other tests skip
   [237]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-5/igt@kms_frontbuffer_tracking@psr-modesetfrombusy.html

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

  * igt@kms_hdr@bpc-switch-dpms:
    - shard-dg1:          NOTRUN -> [SKIP][239] ([i915#3555] / [i915#8228]) +2 other tests skip
   [239]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-17/igt@kms_hdr@bpc-switch-dpms.html

  * igt@kms_hdr@static-toggle-suspend:
    - shard-dg2:          NOTRUN -> [SKIP][240] ([i915#3555] / [i915#8228]) +2 other tests skip
   [240]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-7/igt@kms_hdr@static-toggle-suspend.html
    - shard-rkl:          NOTRUN -> [SKIP][241] ([i915#3555] / [i915#8228]) +1 other test skip
   [241]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-5/igt@kms_hdr@static-toggle-suspend.html

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

  * igt@kms_panel_fitting@legacy:
    - shard-dg1:          NOTRUN -> [SKIP][243] ([i915#6301])
   [243]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-15/igt@kms_panel_fitting@legacy.html

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

  * igt@kms_plane_multiple@tiling-y:
    - shard-dg2:          NOTRUN -> [SKIP][245] ([i915#8806])
   [245]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-2/igt@kms_plane_multiple@tiling-y.html

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

  * igt@kms_plane_scaling@plane-downscale-factor-0-25-with-rotation@pipe-d-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][247] ([i915#5176]) +3 other tests skip
   [247]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-3/igt@kms_plane_scaling@plane-downscale-factor-0-25-with-rotation@pipe-d-edp-1.html

  * igt@kms_plane_scaling@plane-scaler-unity-scaling-with-rotation@pipe-a-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [SKIP][248] ([i915#9423]) +5 other tests skip
   [248]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-3/igt@kms_plane_scaling@plane-scaler-unity-scaling-with-rotation@pipe-a-hdmi-a-2.html

  * igt@kms_plane_scaling@plane-scaler-unity-scaling-with-rotation@pipe-d-hdmi-a-3:
    - shard-dg1:          NOTRUN -> [SKIP][249] ([i915#9423]) +3 other tests skip
   [249]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-13/igt@kms_plane_scaling@plane-scaler-unity-scaling-with-rotation@pipe-d-hdmi-a-3.html

  * igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-rotation@pipe-a-hdmi-a-1:
    - shard-rkl:          NOTRUN -> [SKIP][250] ([i915#5176] / [i915#9423]) +1 other test skip
   [250]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-4/igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-rotation@pipe-a-hdmi-a-1.html

  * igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-factor-0-25@pipe-c-hdmi-a-1:
    - shard-tglu:         NOTRUN -> [SKIP][251] ([i915#5235]) +3 other tests skip
   [251]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-tglu-5/igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-factor-0-25@pipe-c-hdmi-a-1.html

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

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

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

  * igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-25@pipe-d-hdmi-a-4:
    - shard-dg1:          NOTRUN -> [SKIP][255] ([i915#5235]) +15 other tests skip
   [255]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-16/igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-25@pipe-d-hdmi-a-4.html

  * igt@kms_pm_backlight@basic-brightness:
    - shard-dg1:          NOTRUN -> [SKIP][256] ([i915#5354])
   [256]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-17/igt@kms_pm_backlight@basic-brightness.html

  * igt@kms_pm_backlight@fade:
    - shard-tglu:         NOTRUN -> [SKIP][257] ([i915#9812])
   [257]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-tglu-7/igt@kms_pm_backlight@fade.html

  * igt@kms_pm_backlight@fade-with-dpms:
    - shard-rkl:          NOTRUN -> [SKIP][258] ([i915#5354])
   [258]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-5/igt@kms_pm_backlight@fade-with-dpms.html

  * igt@kms_pm_dc@dc6-dpms:
    - shard-dg2:          NOTRUN -> [SKIP][259] ([i915#5978])
   [259]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-5/igt@kms_pm_dc@dc6-dpms.html
    - shard-rkl:          NOTRUN -> [SKIP][260] ([i915#3361])
   [260]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-2/igt@kms_pm_dc@dc6-dpms.html

  * igt@kms_pm_lpsp@kms-lpsp:
    - shard-dg1:          NOTRUN -> [SKIP][261] ([i915#9340])
   [261]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-16/igt@kms_pm_lpsp@kms-lpsp.html

  * igt@kms_pm_lpsp@screens-disabled:
    - shard-rkl:          NOTRUN -> [SKIP][262] ([i915#8430])
   [262]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-3/igt@kms_pm_lpsp@screens-disabled.html

  * igt@kms_pm_rpm@dpms-lpsp:
    - shard-dg1:          NOTRUN -> [SKIP][263] ([i915#9519]) +1 other test skip
   [263]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-16/igt@kms_pm_rpm@dpms-lpsp.html

  * igt@kms_pm_rpm@dpms-non-lpsp:
    - shard-rkl:          NOTRUN -> [SKIP][264] ([i915#9519])
   [264]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-5/igt@kms_pm_rpm@dpms-non-lpsp.html

  * igt@kms_pm_rpm@i2c:
    - shard-dg2:          [PASS][265] -> [FAIL][266] ([i915#8717])
   [265]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7800/shard-dg2-7/igt@kms_pm_rpm@i2c.html
   [266]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-2/igt@kms_pm_rpm@i2c.html

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

  * igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait:
    - shard-rkl:          [PASS][268] -> [SKIP][269] ([i915#9519])
   [268]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7800/shard-rkl-1/igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait.html
   [269]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-5/igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait.html

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

  * igt@kms_prime@d3hot:
    - shard-dg1:          NOTRUN -> [SKIP][271] ([i915#6524]) +1 other test skip
   [271]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-18/igt@kms_prime@d3hot.html

  * igt@kms_psr2_sf@fbc-plane-move-sf-dmg-area@psr2-pipe-a-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][272] ([i915#9808]) +1 other test skip
   [272]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-7/igt@kms_psr2_sf@fbc-plane-move-sf-dmg-area@psr2-pipe-a-edp-1.html

  * igt@kms_psr2_sf@fbc-primary-plane-update-sf-dmg-area:
    - shard-rkl:          NOTRUN -> [SKIP][273] +40 other tests skip
   [273]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-4/igt@kms_psr2_sf@fbc-primary-plane-update-sf-dmg-area.html

  * igt@kms_psr2_su@frontbuffer-xrgb8888:
    - shard-dg2:          NOTRUN -> [SKIP][274] ([i915#9683]) +1 other test skip
   [274]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-5/igt@kms_psr2_su@frontbuffer-xrgb8888.html
    - shard-rkl:          NOTRUN -> [SKIP][275] ([i915#9683])
   [275]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-3/igt@kms_psr2_su@frontbuffer-xrgb8888.html

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

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

  * igt@kms_psr@pr-cursor-plane-onoff:
    - shard-rkl:          NOTRUN -> [SKIP][278] ([i915#1072] / [i915#9732]) +17 other tests skip
   [278]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-5/igt@kms_psr@pr-cursor-plane-onoff.html

  * igt@kms_psr@pr-primary-render:
    - shard-mtlp:         NOTRUN -> [SKIP][279] ([i915#9688]) +10 other tests skip
   [279]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-1/igt@kms_psr@pr-primary-render.html

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

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

  * igt@kms_psr@psr2-sprite-plane-onoff:
    - shard-dg2:          NOTRUN -> [SKIP][282] ([i915#1072] / [i915#9673] / [i915#9732]) +1 other test skip
   [282]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-11/igt@kms_psr@psr2-sprite-plane-onoff.html

  * igt@kms_psr_stress_test@flip-primary-invalidate-overlay:
    - shard-dg1:          NOTRUN -> [SKIP][283] ([i915#9685]) +2 other tests skip
   [283]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-13/igt@kms_psr_stress_test@flip-primary-invalidate-overlay.html

  * igt@kms_psr_stress_test@invalidate-primary-flip-overlay:
    - shard-dg2:          NOTRUN -> [SKIP][284] ([i915#9685])
   [284]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-2/igt@kms_psr_stress_test@invalidate-primary-flip-overlay.html
    - shard-rkl:          NOTRUN -> [SKIP][285] ([i915#9685])
   [285]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-6/igt@kms_psr_stress_test@invalidate-primary-flip-overlay.html

  * igt@kms_rotation_crc@primary-y-tiled-reflect-x-90:
    - shard-mtlp:         NOTRUN -> [SKIP][286] ([i915#4235]) +2 other tests skip
   [286]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-2/igt@kms_rotation_crc@primary-y-tiled-reflect-x-90.html

  * igt@kms_rotation_crc@primary-yf-tiled-reflect-x-180:
    - shard-dg2:          NOTRUN -> [SKIP][287] ([i915#5190])
   [287]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-6/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-180.html

  * igt@kms_rotation_crc@primary-yf-tiled-reflect-x-270:
    - shard-dg2:          NOTRUN -> [SKIP][288] ([i915#4235] / [i915#5190])
   [288]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-7/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-270.html
    - shard-rkl:          NOTRUN -> [SKIP][289] ([i915#5289]) +1 other test skip
   [289]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-3/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-270.html

  * igt@kms_rotation_crc@primary-yf-tiled-reflect-x-90:
    - shard-dg1:          NOTRUN -> [SKIP][290] ([i915#5289]) +1 other test skip
   [290]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-17/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-90.html
    - shard-tglu:         NOTRUN -> [SKIP][291] ([i915#5289])
   [291]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-tglu-9/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-90.html

  * igt@kms_rotation_crc@sprite-rotation-90-pos-100-0:
    - shard-dg2:          NOTRUN -> [SKIP][292] ([i915#4235])
   [292]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-10/igt@kms_rotation_crc@sprite-rotation-90-pos-100-0.html

  * igt@kms_scaling_modes@scaling-mode-none@pipe-a-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][293] ([i915#5030]) +2 other tests skip
   [293]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-8/igt@kms_scaling_modes@scaling-mode-none@pipe-a-edp-1.html

  * igt@kms_scaling_modes@scaling-mode-none@pipe-d-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][294] ([i915#5030] / [i915#9041])
   [294]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-8/igt@kms_scaling_modes@scaling-mode-none@pipe-d-edp-1.html

  * igt@kms_sysfs_edid_timing:
    - shard-dg1:          NOTRUN -> [FAIL][295] ([IGT#2] / [i915#6493])
   [295]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-17/igt@kms_sysfs_edid_timing.html

  * igt@kms_universal_plane@cursor-fb-leak@pipe-a-hdmi-a-1:
    - shard-snb:          [PASS][296] -> [FAIL][297] ([i915#9196])
   [296]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7800/shard-snb4/igt@kms_universal_plane@cursor-fb-leak@pipe-a-hdmi-a-1.html
   [297]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-snb6/igt@kms_universal_plane@cursor-fb-leak@pipe-a-hdmi-a-1.html

  * igt@kms_universal_plane@cursor-fb-leak@pipe-b-hdmi-a-1:
    - shard-tglu:         [PASS][298] -> [FAIL][299] ([i915#9196]) +1 other test fail
   [298]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7800/shard-tglu-8/igt@kms_universal_plane@cursor-fb-leak@pipe-b-hdmi-a-1.html
   [299]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-tglu-8/igt@kms_universal_plane@cursor-fb-leak@pipe-b-hdmi-a-1.html

  * igt@kms_vrr@flip-basic-fastset:
    - shard-dg2:          NOTRUN -> [SKIP][300] ([i915#9906])
   [300]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-8/igt@kms_vrr@flip-basic-fastset.html
    - shard-rkl:          NOTRUN -> [SKIP][301] ([i915#9906])
   [301]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-4/igt@kms_vrr@flip-basic-fastset.html

  * igt@kms_vrr@flip-suspend:
    - shard-mtlp:         NOTRUN -> [SKIP][302] ([i915#3555] / [i915#8808])
   [302]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-5/igt@kms_vrr@flip-suspend.html

  * igt@kms_vrr@max-min:
    - shard-dg1:          NOTRUN -> [SKIP][303] ([i915#9906]) +1 other test skip
   [303]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-13/igt@kms_vrr@max-min.html

  * igt@kms_writeback@writeback-check-output:
    - shard-dg2:          NOTRUN -> [SKIP][304] ([i915#2437]) +1 other test skip
   [304]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-6/igt@kms_writeback@writeback-check-output.html
    - shard-rkl:          NOTRUN -> [SKIP][305] ([i915#2437])
   [305]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-5/igt@kms_writeback@writeback-check-output.html

  * igt@kms_writeback@writeback-fb-id-xrgb2101010:
    - shard-mtlp:         NOTRUN -> [SKIP][306] ([i915#2437] / [i915#9412])
   [306]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-7/igt@kms_writeback@writeback-fb-id-xrgb2101010.html

  * igt@kms_writeback@writeback-pixel-formats:
    - shard-tglu:         NOTRUN -> [SKIP][307] ([i915#2437] / [i915#9412])
   [307]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-tglu-2/igt@kms_writeback@writeback-pixel-formats.html
    - shard-dg2:          NOTRUN -> [SKIP][308] ([i915#2437] / [i915#9412])
   [308]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-2/igt@kms_writeback@writeback-pixel-formats.html

  * igt@perf@global-sseu-config:
    - shard-dg2:          NOTRUN -> [SKIP][309] ([i915#7387])
   [309]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-5/igt@perf@global-sseu-config.html

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

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

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

  * igt@prime_vgem@basic-fence-read:
    - shard-rkl:          NOTRUN -> [SKIP][314] ([i915#3291] / [i915#3708])
   [314]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-1/igt@prime_vgem@basic-fence-read.html
    - shard-mtlp:         NOTRUN -> [SKIP][315] ([i915#3708])
   [315]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-7/igt@prime_vgem@basic-fence-read.html

  * igt@prime_vgem@basic-write:
    - shard-mtlp:         NOTRUN -> [SKIP][316] ([i915#10216] / [i915#3708])
   [316]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-5/igt@prime_vgem@basic-write.html

  * igt@prime_vgem@fence-flip-hang:
    - shard-rkl:          NOTRUN -> [SKIP][317] ([i915#3708])
   [317]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-5/igt@prime_vgem@fence-flip-hang.html

  * igt@sriov_basic@enable-vfs-autoprobe-off:
    - shard-dg2:          NOTRUN -> [SKIP][318] ([i915#9917])
   [318]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-6/igt@sriov_basic@enable-vfs-autoprobe-off.html
    - shard-mtlp:         NOTRUN -> [SKIP][319] ([i915#9917])
   [319]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-8/igt@sriov_basic@enable-vfs-autoprobe-off.html

  * igt@sriov_basic@enable-vfs-autoprobe-on:
    - shard-dg1:          NOTRUN -> [SKIP][320] ([i915#9917])
   [320]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-15/igt@sriov_basic@enable-vfs-autoprobe-on.html

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

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

  * igt@tools_test@sysfs_l3_parity:
    - shard-dg2:          NOTRUN -> [SKIP][323] ([i915#4818])
   [323]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-6/igt@tools_test@sysfs_l3_parity.html

  * igt@v3d/v3d_get_param@base-params:
    - shard-mtlp:         NOTRUN -> [SKIP][324] ([i915#2575]) +8 other tests skip
   [324]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-1/igt@v3d/v3d_get_param@base-params.html

  * igt@v3d/v3d_perfmon@get-values-invalid-perfmon:
    - shard-dg1:          NOTRUN -> [SKIP][325] ([i915#2575]) +20 other tests skip
   [325]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-17/igt@v3d/v3d_perfmon@get-values-invalid-perfmon.html

  * igt@v3d/v3d_submit_csd@bad-pad:
    - shard-tglu:         NOTRUN -> [SKIP][326] ([i915#2575]) +10 other tests skip
   [326]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-tglu-8/igt@v3d/v3d_submit_csd@bad-pad.html

  * igt@v3d/v3d_submit_csd@job-perfmon:
    - shard-dg2:          NOTRUN -> [SKIP][327] ([i915#2575]) +16 other tests skip
   [327]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-5/igt@v3d/v3d_submit_csd@job-perfmon.html

  * igt@vc4/vc4_mmap@mmap-bad-handle:
    - shard-dg1:          NOTRUN -> [SKIP][328] ([i915#7711]) +10 other tests skip
   [328]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-13/igt@vc4/vc4_mmap@mmap-bad-handle.html

  * igt@vc4/vc4_purgeable_bo@access-purgeable-bo-mem:
    - shard-mtlp:         NOTRUN -> [SKIP][329] ([i915#7711]) +4 other tests skip
   [329]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-2/igt@vc4/vc4_purgeable_bo@access-purgeable-bo-mem.html

  * igt@vc4/vc4_purgeable_bo@mark-purgeable:
    - shard-rkl:          NOTRUN -> [SKIP][330] ([i915#7711]) +7 other tests skip
   [330]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-4/igt@vc4/vc4_purgeable_bo@mark-purgeable.html

  * igt@vc4/vc4_wait_bo@bad-bo:
    - shard-dg2:          NOTRUN -> [SKIP][331] ([i915#7711]) +6 other tests skip
   [331]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-2/igt@vc4/vc4_wait_bo@bad-bo.html

  
#### Possible fixes ####

  * igt@gem_create@create-ext-cpu-access-big:
    - shard-dg2:          [ABORT][332] ([i915#9846]) -> [PASS][333]
   [332]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7800/shard-dg2-8/igt@gem_create@create-ext-cpu-access-big.html
   [333]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-2/igt@gem_create@create-ext-cpu-access-big.html

  * igt@gem_ctx_exec@basic-nohangcheck:
    - shard-tglu:         [FAIL][334] ([i915#6268]) -> [PASS][335]
   [334]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7800/shard-tglu-8/igt@gem_ctx_exec@basic-nohangcheck.html
   [335]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-tglu-5/igt@gem_ctx_exec@basic-nohangcheck.html

  * igt@gem_eio@reset-stress:
    - shard-dg1:          [FAIL][336] ([i915#5784]) -> [PASS][337]
   [336]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7800/shard-dg1-16/igt@gem_eio@reset-stress.html
   [337]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg1-13/igt@gem_eio@reset-stress.html

  * igt@gem_exec_balancer@nop:
    - shard-mtlp:         [INCOMPLETE][338] ([i915#9856]) -> [PASS][339]
   [338]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7800/shard-mtlp-1/igt@gem_exec_balancer@nop.html
   [339]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-1/igt@gem_exec_balancer@nop.html

  * igt@gem_exec_fair@basic-pace@vecs0:
    - shard-rkl:          [FAIL][340] ([i915#2842]) -> [PASS][341] +2 other tests pass
   [340]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7800/shard-rkl-3/igt@gem_exec_fair@basic-pace@vecs0.html
   [341]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-5/igt@gem_exec_fair@basic-pace@vecs0.html

  * igt@gem_lmem_swapping@heavy-verify-random-ccs@lmem0:
    - shard-dg2:          [FAIL][342] ([i915#10378]) -> [PASS][343]
   [342]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7800/shard-dg2-2/igt@gem_lmem_swapping@heavy-verify-random-ccs@lmem0.html
   [343]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-7/igt@gem_lmem_swapping@heavy-verify-random-ccs@lmem0.html

  * igt@i915_module_load@reload-with-fault-injection:
    - shard-snb:          [INCOMPLETE][344] ([i915#9849]) -> [PASS][345]
   [344]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7800/shard-snb1/igt@i915_module_load@reload-with-fault-injection.html
   [345]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-snb6/igt@i915_module_load@reload-with-fault-injection.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0-hflip:
    - shard-mtlp:         [FAIL][346] ([i915#5138]) -> [PASS][347]
   [346]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7800/shard-mtlp-8/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0-hflip.html
   [347]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-8/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0-hflip.html

  * igt@kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-0-async-flip:
    - shard-tglu:         [FAIL][348] ([i915#3743]) -> [PASS][349] +1 other test pass
   [348]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7800/shard-tglu-2/igt@kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-0-async-flip.html
   [349]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-tglu-9/igt@kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-0-async-flip.html

  * igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions:
    - shard-glk:          [FAIL][350] ([i915#2346]) -> [PASS][351]
   [350]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7800/shard-glk5/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions.html
   [351]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-glk2/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions.html

  * igt@kms_cursor_legacy@torture-bo@pipe-a:
    - shard-snb:          [DMESG-WARN][352] ([i915#10166]) -> [PASS][353]
   [352]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7800/shard-snb1/igt@kms_cursor_legacy@torture-bo@pipe-a.html
   [353]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-snb7/igt@kms_cursor_legacy@torture-bo@pipe-a.html
    - shard-dg2:          [DMESG-WARN][354] ([i915#10166]) -> [PASS][355]
   [354]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7800/shard-dg2-11/igt@kms_cursor_legacy@torture-bo@pipe-a.html
   [355]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-10/igt@kms_cursor_legacy@torture-bo@pipe-a.html

  * igt@kms_cursor_legacy@torture-bo@pipe-b:
    - shard-glk:          [DMESG-WARN][356] ([i915#10166] / [i915#1982]) -> [PASS][357]
   [356]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7800/shard-glk3/igt@kms_cursor_legacy@torture-bo@pipe-b.html
   [357]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-glk7/igt@kms_cursor_legacy@torture-bo@pipe-b.html

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-indfb-draw-mmap-cpu:
    - shard-dg2:          [FAIL][358] ([i915#6880]) -> [PASS][359] +3 other tests pass
   [358]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7800/shard-dg2-7/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-indfb-draw-mmap-cpu.html
   [359]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-10/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-indfb-draw-mmap-cpu.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-pwrite:
    - shard-snb:          [SKIP][360] -> [PASS][361] +1 other test pass
   [360]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7800/shard-snb4/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-pwrite.html
   [361]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-snb7/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-pwrite.html

  * igt@kms_pm_rpm@modeset-lpsp:
    - shard-rkl:          [SKIP][362] ([i915#9519]) -> [PASS][363] +1 other test pass
   [362]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7800/shard-rkl-3/igt@kms_pm_rpm@modeset-lpsp.html
   [363]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-rkl-4/igt@kms_pm_rpm@modeset-lpsp.html

  * igt@kms_pm_rpm@modeset-non-lpsp:
    - shard-dg2:          [SKIP][364] ([i915#9519]) -> [PASS][365]
   [364]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7800/shard-dg2-10/igt@kms_pm_rpm@modeset-non-lpsp.html
   [365]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-2/igt@kms_pm_rpm@modeset-non-lpsp.html

  * igt@perf_pmu@busy-double-start@vecs1:
    - shard-dg2:          [FAIL][366] ([i915#4349]) -> [PASS][367] +3 other tests pass
   [366]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7800/shard-dg2-3/igt@perf_pmu@busy-double-start@vecs1.html
   [367]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-6/igt@perf_pmu@busy-double-start@vecs1.html

  
#### Warnings ####

  * igt@i915_module_load@reload-with-fault-injection:
    - shard-tglu:         [INCOMPLETE][368] -> [INCOMPLETE][369] ([i915#9820])
   [368]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7800/shard-tglu-6/igt@i915_module_load@reload-with-fault-injection.html
   [369]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-tglu-9/igt@i915_module_load@reload-with-fault-injection.html
    - shard-mtlp:         [ABORT][370] ([i915#10131] / [i915#9697]) -> [ABORT][371] ([i915#10131] / [i915#9820])
   [370]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7800/shard-mtlp-4/igt@i915_module_load@reload-with-fault-injection.html
   [371]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-mtlp-6/igt@i915_module_load@reload-with-fault-injection.html

  * igt@kms_content_protection@type1:
    - shard-dg2:          [SKIP][372] ([i915#7118] / [i915#7162] / [i915#9424]) -> [SKIP][373] ([i915#7118] / [i915#9424])
   [372]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7800/shard-dg2-11/igt@kms_content_protection@type1.html
   [373]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-5/igt@kms_content_protection@type1.html

  * igt@kms_psr@fbc-pr-cursor-mmap-gtt:
    - shard-dg2:          [SKIP][374] ([i915#1072] / [i915#9732]) -> [SKIP][375] ([i915#1072] / [i915#9673] / [i915#9732]) +1 other test skip
   [374]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7800/shard-dg2-7/igt@kms_psr@fbc-pr-cursor-mmap-gtt.html
   [375]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-11/igt@kms_psr@fbc-pr-cursor-mmap-gtt.html

  * igt@kms_psr@psr-cursor-render:
    - shard-dg2:          [SKIP][376] ([i915#1072] / [i915#9673] / [i915#9732]) -> [SKIP][377] ([i915#1072] / [i915#9732]) +9 other tests skip
   [376]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7800/shard-dg2-11/igt@kms_psr@psr-cursor-render.html
   [377]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10979/shard-dg2-6/igt@kms_psr@psr-cursor-render.html

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

  [IGT#2]: https://gitlab.freedesktop.org/drm/igt-gpu-tools/issues/2
  [i915#10055]: https://gitlab.freedesktop.org/drm/intel/issues/10055
  [i915#10070]: https://gitlab.freedesktop.org/drm/intel/issues/10070
  [i915#10131]: https://gitlab.freedesktop.org/drm/intel/issues/10131
  [i915#10166]: https://gitlab.freedesktop.org/drm/intel/issues/10166
  [i915#10216]: https://gitlab.freedesktop.org/drm/intel/issues/10216
  [i915#10278]: https://gitlab.freedesktop.org/drm/intel/issues/10278
  [i915#10307]: https://gitlab.freedesktop.org/drm/intel/issues/10307
  [i915#10378]: https://gitlab.freedesktop.org/drm/intel/issues/10378
  [i915#10380]: https://gitlab.freedesktop.org/drm/intel/issues/10380
  [i915#10386]: https://gitlab.freedesktop.org/drm/intel/issues/10386
  [i915#10434]: https://gitlab.freedesktop.org/drm/intel/issues/10434
  [i915#10656]: https://gitlab.freedesktop.org/drm/intel/issues/10656
  [i915#1072]: https://gitlab.freedesktop.org/drm/intel/issues/1072
  [i915#1769]: https://gitlab.freedesktop.org/drm/intel/issues/1769
  [i915#1825]: https://gitlab.freedesktop.org/drm/intel/issues/1825
  [i915#1839]: https://gitlab.freedesktop.org/drm/intel/issues/1839
  [i915#1982]: https://gitlab.freedesktop.org/drm/intel/issues/1982
  [i915#2122]: https://gitlab.freedesktop.org/drm/intel/issues/2122
  [i915#2346]: https://gitlab.freedesktop.org/drm/intel/issues/2346
  [i915#2434]: https://gitlab.freedesktop.org/drm/intel/issues/2434
  [i915#2437]: https://gitlab.freedesktop.org/drm/intel/issues/2437
  [i915#2527]: https://gitlab.freedesktop.org/drm/intel/issues/2527
  [i915#2575]: https://gitlab.freedesktop.org/drm/intel/issues/2575
  [i915#2587]: https://gitlab.freedesktop.org/drm/intel/issues/2587
  [i915#2672]: https://gitlab.freedesktop.org/drm/intel/issues/2672
  [i915#280]: https://gitlab.freedesktop.org/drm/intel/issues/280
  [i915#284]: https://gitlab.freedesktop.org/drm/intel/issues/284
  [i915#2842]: https://gitlab.freedesktop.org/drm/intel/issues/2842
  [i915#2856]: https://gitlab.freedesktop.org/drm/intel/issues/2856
  [i915#3023]: https://gitlab.freedesktop.org/drm/intel/issues/3023
  [i915#3281]: https://gitlab.freedesktop.org/drm/intel/issues/3281
  [i915#3282]: https://gitlab.freedesktop.org/drm/intel/issues/3282
  [i915#3291]: https://gitlab.freedesktop.org/drm/intel/issues/3291
  [i915#3297]: https://gitlab.freedesktop.org/drm/intel/issues/3297
  [i915#3299]: https://gitlab.freedesktop.org/drm/intel/issues/3299
  [i915#3323]: https://gitlab.freedesktop.org/drm/intel/issues/3323
  [i915#3359]: https://gitlab.freedesktop.org/drm/intel/issues/3359
  [i915#3361]: https://gitlab.freedesktop.org/drm/intel/issues/3361
  [i915#3458]: https://gitlab.freedesktop.org/drm/intel/issues/3458
  [i915#3469]: https://gitlab.freedesktop.org/drm/intel/issues/3469
  [i915#3539]: https://gitlab.freedesktop.org/drm/intel/issues/3539
  [i915#3555]: https://gitlab.freedesktop.org/drm/intel/issues/3555
  [i915#3637]: https://gitlab.freedesktop.org/drm/intel/issues/3637
  [i915#3638]: https://gitlab.freedesktop.org/drm/intel/issues/3638
  [i915#3708]: https://gitlab.freedesktop.org/drm/intel/issues/3708
  [i915#3711]: https://gitlab.freedesktop.org/drm/intel/issues/3711
  [i915#3742]: https://gitlab.freedesktop.org/drm/intel/issues/3742
  [i915#3743]: https://gitlab.freedesktop.org/drm/intel/issues/3743
  [i915#3826]: https://gitlab.freedesktop.org/drm/intel/issues/3826
  [i915#3840]: https://gitlab.freedesktop.org/drm/intel/issues/3840
  [i915#3936]: https://gitlab.freedesktop.org/drm/intel/issues/3936
  [i915#4036]: https://gitlab.freedesktop.org/drm/intel/issues/4036
  [i915#4077]: https://gitlab.freedesktop.org/drm/intel/issues/4077
  [i915#4079]: https://gitlab.freedesktop.org/drm/intel/issues/4079
  [i915#4083]: https://gitlab.freedesktop.org/drm/intel/issues/4083
  [i915#4087]: https://gitlab.freedesktop.org/drm/intel/issues/4087
  [i915#4103]: https://gitlab.freedesktop.org/drm/intel/issues/4103
  [i915#4212]: https://gitlab.freedesktop.org/drm/intel/issues/4212
  [i915#4213]: https://gitlab.freedesktop.org/drm/intel/issues/4213
  [i915#4235]: https://gitlab.freedesktop.org/drm/intel/issues/4235
  [i915#4270]: https://gitlab.freedesktop.org/drm/intel/issues/4270
  [i915#4349]: https://gitlab.freedesktop.org/drm/intel/issues/4349
  [i915#4473]: https://gitlab.freedesktop.org/drm/intel/issues/4473
  [i915#4525]: https://gitlab.freedesktop.org/drm/intel/issues/4525
  [i915#4537]: https://gitlab.freedesktop.org/drm/intel/issues/4537
  [i915#4538]: https://gitlab.freedesktop.org/drm/intel/issues/4538
  [i915#4565]: https://gitlab.freedesktop.org/drm/intel/issues/4565
  [i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613
  [i915#4771]: https://gitlab.freedesktop.org/drm/intel/issues/4771
  [i915#4812]: https://gitlab.freedesktop.org/drm/intel/issues/4812
  [i915#4816]: https://gitlab.freedesktop.org/drm/intel/issues/4816
  [i915#4817]: https://gitlab.freedesktop.org/drm/intel/issues/4817
  [i915#4818]: https://gitlab.freedesktop.org/drm/intel/issues/4818
  [i915#4852]: https://gitlab.freedesktop.org/drm/intel/issues/4852
  [i915#4854]: https://gitlab.freedesktop.org/drm/intel/issues/4854
  [i915#4860]: https://gitlab.freedesktop.org/drm/intel/issues/4860
  [i915#4873]: https://gitlab.freedesktop.org/drm/intel/issues/4873
  [i915#4879]: https://gitlab.freedesktop.org/drm/intel/issues/4879
  [i915#4881]: https://gitlab.freedesktop.org/drm/intel/issues/4881
  [i915#4885]: https://gitlab.freedesktop.org/drm/intel/issues/4885
  [i915#5030]: https://gitlab.freedesktop.org/drm/intel/issues/5030
  [i915#5138]: https://gitlab.freedesktop.org/drm/intel/issues/5138
  [i915#5176]: https://gitlab.freedesktop.org/drm/intel/issues/5176
  [i915#5190]: https://gitlab.freedesktop.org/drm/intel/issues/5190
  [i915#5235]: https://gitlab.freedesktop.org/drm/intel/issues/5235
  [i915#5274]: https://gitlab.freedesktop.org/drm/intel/issues/5274
  [i915#5286]: https://gitlab.freedesktop.org/drm/intel/issues/5286
  [i915#5289]: https://gitlab.freedesktop.org/drm/intel/issues/5289
  [i915#5354]: https://gitlab.freedesktop.org/drm/intel/issues/5354
  [i915#5439]: https://gitlab.freedesktop.org/drm/intel/issues/5439
  [i915#5784]: https://gitlab.freedesktop.org/drm/intel/issues/5784
  [i915#5889]: https://gitlab.freedesktop.org/drm/intel/issues/5889
  [i915#5978]: https://gitlab.freedesktop.org/drm/intel/issues/5978
  [i915#6095]: https://gitlab.freedesktop.org/drm/intel/issues/6095
  [i915#6187]: https://gitlab.freedesktop.org/drm/intel/issues/6187
  [i915#6188]: https://gitlab.freedesktop.org/drm/intel/issues/6188
  [i915#6227]: https://gitlab.freedesktop.org/drm/intel/issues/6227
  [i915#6268]: https://gitlab.freedesktop.org/drm/intel/issues/6268
  [i915#6301]: https://gitlab.freedesktop.org/drm/intel/issues/6301
  [i915#6335]: https://gitlab.freedesktop.org/drm/intel/issues/6335
  [i915#6493]: https://gitlab.freedesktop.org/drm/intel/issues/6493
  [i915#6524]: https://gitlab.freedesktop.org/drm/intel/issues/6524
  [i915#658]: https://gitlab.freedesktop.org/drm/intel/issues/658
  [i915#6590]: https://gitlab.freedesktop.org/drm/intel/issues/6590
  [i915#6880]: https://gitlab.freedesktop.org/drm/intel/issues/6880
  [i915#6944]: https://gitlab.freedesktop.org/drm/intel/issues/6944
  [i915#7118]: https://gitlab.freedesktop.org/drm/intel/issues/7118
  [i915#7162]: https://gitlab.freedesktop.org/drm/intel/issues/7162
  [i915#7173]: https://gitlab.freedesktop.org/drm/intel/issues/7173
  [i915#7178]: https://gitlab.freedesktop.org/drm/intel/issues/7178
  [i915#7213]: https://gitlab.freedesktop.org/drm/intel/issues/7213
  [i915#7387]: https://gitlab.freedesktop.org/drm/intel/issues/7387
  [i915#7443]: https://gitlab.freedesktop.org/drm/intel/issues/7443
  [i915#7697]: https://gitlab.freedesktop.org/drm/intel/issues/7697
  [i915#7701]: https://gitlab.freedesktop.org/drm/intel/issues/7701
  [i915#7711]: https://gitlab.freedesktop.org/drm/intel/issues/7711
  [i915#7790]: https://gitlab.freedesktop.org/drm/intel/issues/7790
  [i915#7828]: https://gitlab.freedesktop.org/drm/intel/issues/7828
  [i915#8228]: https://gitlab.freedesktop.org/drm/intel/issues/8228
  [i915#8289]: https://gitlab.freedesktop.org/drm/intel/issues/8289
  [i915#8399]: https://gitlab.freedesktop.org/drm/intel/issues/8399
  [i915#8411]: https://gitlab.freedesktop.org/drm/intel/issues/8411
  [i915#8414]: https://gitlab.freedesktop.org/drm/intel/issues/8414
  [i915#8428]: https://gitlab.freedesktop.org/drm/intel/issues/8428
  [i915#8430]: https://gitlab.freedesktop.org/drm/intel/issues/8430
  [i915#8555]: https://gitlab.freedesktop.org/drm/intel/issues/8555
  [i915#8708]: https://gitlab.freedesktop.org/drm/intel/issues/8708
  [i915#8709]: https://gitlab.freedesktop.org/drm/intel/issues/8709
  [i915#8717]: https://gitlab.freedesktop.org/drm/intel/issues/8717
  [i915#8806]: https://gitlab.freedesktop.org/drm/intel/issues/8806
  [i915#8808]: https://gitlab.freedesktop.org/drm/intel/issues/8808
  [i915#8810]: https://gitlab.freedesktop.org/drm/intel/issues/8810
  [i915#8812]: https://gitlab.freedesktop.org/drm/intel/issues/8812
  [i915#8814]: https://gitlab.freedesktop.org/drm/intel/issues/8814
  [i915#8821]: https://gitlab.freedesktop.org/drm/intel/issues/8821
  [i915#8925]: https://gitlab.freedesktop.org/drm/intel/issues/8925
  [i915#9041]: https://gitlab.freedesktop.org/drm/intel/issues/9041
  [i915#9053]: https://gitlab.freedesktop.org/drm/intel/issues/9053
  [i915#9067]: https://gitlab.freedesktop.org/drm/intel/issues/9067
  [i915#9196]: https://gitlab.freedesktop.org/drm/intel/issues/9196
  [i915#9311]: https://gitlab.freedesktop.org/drm/intel/issues/9311
  [i915#9318]: https://gitlab.freedesktop.org/drm/intel/issues/9318
  [i915#9323]: https://gitlab.freedesktop.org/drm/intel/issues/9323
  [i915#9337]: https://gitlab.freedesktop.org/drm/intel/issues/9337
  [i915#9340]: https://gitlab.freedesktop.org/drm/intel/issues/9340
  [i915#9408]: https://gitlab.freedesktop.org/drm/intel/issues/9408
  [i915#9412]: https://gitlab.freedesktop.org/drm/intel/issues/9412
  [i915#9423]: https://gitlab.freedesktop.org/drm/intel/issues/9423
  [i915#9424]: https://gitlab.freedesktop.org/drm/intel/issues/9424
  [i915#9519]: https://gitlab.freedesktop.org/drm/intel/issues/9519
  [i915#9606]: https://gitlab.freedesktop.org/drm/intel/issues/9606
  [i915#9618]: https://gitlab.freedesktop.org/drm/intel/issues/9618
  [i915#9673]: https://gitlab.freedesktop.org/drm/intel/issues/9673
  [i915#9683]: https://gitlab.freedesktop.org/drm/intel/issues/9683
  [i915#9685]: https://gitlab.freedesktop.org/drm/intel/issues/9685
  [i915#9688]: https://gitlab.freedesktop.org/drm/intel/issues/9688
  [i915#9697]: https://gitlab.freedesktop.org/drm/intel/issues/9697
  [i915#9723]: https://gitlab.freedesktop.org/drm/intel/issues/9723
  [i915#9732]: https://gitlab.freedesktop.org/drm/intel/issues/9732
  [i915#9766]: https://gitlab.freedesktop.org/drm/intel/issues/9766
  [i915#9781]: https://gitlab.freedesktop.org/drm/intel/issues/9781
  [i915#9808]: https://gitlab.freedesktop.org/drm/intel/issues/9808
  [i915#9809]: https://gitlab.freedesktop.org/drm/intel/issues/9809
  [i915#9812]: https://gitlab.freedesktop.org/drm/intel/issues/9812
  [i915#9820]: https://gitlab.freedesktop.org/drm/intel/issues/9820
  [i915#9846]: https://gitlab.freedesktop.org/drm/intel/issues/9846
  [i915#9849]: https://gitlab.freedesktop.org/drm/intel/issues/9849
  [i915#9856]: https://gitlab.freedesktop.org/drm/intel/issues/9856
  [i915#9906]: https://gitlab.freedesktop.org/drm/intel/issues/9906
  [i915#9917]: https://gitlab.freedesktop.org/drm/intel/issues/9917
  [i915#9934]: https://gitlab.freedesktop.org/drm/intel/issues/9934


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

  * CI: CI-20190529 -> None
  * IGT: IGT_7800 -> IGTPW_10979

  CI-20190529: 20190529
  CI_DRM_14531: 9619b05620f06aaf89a5c603c2ba55c1419ee78e @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_10979: 10979
  IGT_7800: 7800

== Logs ==

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

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

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

* Re: [PATCH i-g-t 01/12] lib/igt_drm_fdinfo: Stop passing key twice
  2024-04-05  6:00 ` [PATCH i-g-t 01/12] lib/igt_drm_fdinfo: Stop passing key twice Lucas De Marchi
@ 2024-04-18 22:14   ` Umesh Nerlige Ramappa
  2024-04-19  7:42   ` Tvrtko Ursulin
  1 sibling, 0 replies; 33+ messages in thread
From: Umesh Nerlige Ramappa @ 2024-04-18 22:14 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: igt-dev, Tvrtko Ursulin

On Fri, Apr 05, 2024 at 01:00:45AM -0500, Lucas De Marchi wrote:
>Change strstartswith() so it also returns the length, which then can be
>used inside the branch when it matches. A good compiler shall optimize
>out the strlen call since the argument is a constant literal.
>
>With this, the find_kv() is not needed anymore and the difference with
>regard the other branches can be summarized with a new ignore_space()
>helper and the fact it matches the entire key by appending the ':'. The
>helper is added on top of the file so it can be reused later.
>
>Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>

LGTM,

Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>

>---
> lib/igt_drm_fdinfo.c | 87 +++++++++++++++++++++++---------------------
> 1 file changed, 45 insertions(+), 42 deletions(-)
>
>diff --git a/lib/igt_drm_fdinfo.c b/lib/igt_drm_fdinfo.c
>index 18dbb5d0b..bfc946f24 100644
>--- a/lib/igt_drm_fdinfo.c
>+++ b/lib/igt_drm_fdinfo.c
>@@ -53,6 +53,14 @@ static size_t read_fdinfo(char *buf, const size_t sz, int at, const char *name)
> 	return count > 0 ? count : 0;
> }
>
>+static const char *ignore_space(const char *s)
>+{
>+	for (; *s && isspace(*s); s++)
>+		;
>+
>+	return s;
>+}
>+
> static int parse_engine(char *line, struct drm_client_fdinfo *info,
> 			size_t prefix_len,
> 			const char **name_map, unsigned int map_entries,
>@@ -104,23 +112,6 @@ static int parse_engine(char *line, struct drm_client_fdinfo *info,
> 	return found;
> }
>
>-static const char *find_kv(const char *buf, const char *key, size_t keylen)
>-{
>-	const char *p;
>-
>-	if (strncmp(buf, key, keylen))
>-		return NULL;
>-
>-	p = buf + keylen;
>-	if (*p != ':')
>-		return NULL;
>-
>-	for (p++; *p && isspace(*p); p++)
>-		;
>-
>-	return *p ? p : NULL;
>-}
>-
> static int parse_region(char *line, struct drm_client_fdinfo *info,
> 			size_t prefix_len,
> 			const char **region_map, unsigned int region_entries,
>@@ -205,6 +196,11 @@ out:
> 		}							\
> 	} while (0)
>
>+#define strstartswith(a, b, plen__) ({					\
>+		*plen__ = strlen(b);					\
>+		strncmp(a, b, *plen__) == 0;				\
>+})
>+
> unsigned int
> __igt_parse_drm_fdinfo(int dir, const char *fd, struct drm_client_fdinfo *info,
> 		       const char **name_map, unsigned int map_entries,
>@@ -222,31 +218,39 @@ __igt_parse_drm_fdinfo(int dir, const char *fd, struct drm_client_fdinfo *info,
>
> 	while ((l = strtok_r(_buf, "\n", &ctx))) {
> 		uint64_t val = 0;
>+		size_t keylen;
> 		const char *v;
> 		int idx;
>
> 		_buf = NULL;
>
>-		if ((v = find_kv(l, "drm-driver", strlen("drm-driver")))) {
>-			strncpy(info->driver, v, sizeof(info->driver) - 1);
>-			good++;
>-		}  else if ((v = find_kv(l, "drm-client-id",
>-					 strlen("drm-client-id")))) {
>-			info->id = atol(v);
>-			good++;
>-		} else if ((v = find_kv(l, "drm-pdev", strlen("drm-pdev")))) {
>-			/* optional */
>+		if (strstartswith(l, "drm-driver:", &keylen)) {
>+			v = l + keylen;
>+			v = ignore_space(v);
>+			if (*v) {
>+				strncpy(info->driver, v, sizeof(info->driver) - 1);
>+				good++;
>+			}
>+		}  else if (strstartswith(l, "drm-client-id:", &keylen)) {
>+			v = l + keylen;
>+			v = ignore_space(v);
>+			if (*v) {
>+				info->id = atol(v);
>+				good++;
>+			}
>+		} else if (strstartswith(l, "drm-pdev:", &keylen)) {
>+			v = l + keylen;
>+			v = ignore_space(v);
> 			strncpy(info->pdev, v, sizeof(info->pdev) - 1);
>-		} else if (!strncmp(l, "drm-engine-capacity-", 20)) {
>-			idx = parse_engine(l, info,
>-					   strlen("drm-engine-capacity-"),
>+		} else if (strstartswith(l, "drm-engine-capacity-", &keylen)) {
>+			idx = parse_engine(l, info, keylen,
> 					   name_map, map_entries, &val);
> 			if (idx >= 0) {
> 				info->capacity[idx] = val;
> 				num_capacity++;
> 			}
>-		} else if (!strncmp(l, "drm-engine-", 11)) {
>-			idx = parse_engine(l, info, strlen("drm-engine-"),
>+		} else if (strstartswith(l, "drm-engine-", &keylen)) {
>+			idx = parse_engine(l, info, keylen,
> 					   name_map, map_entries, &val);
> 			if (idx >= 0) {
> 				if (!info->capacity[idx])
>@@ -256,25 +260,24 @@ __igt_parse_drm_fdinfo(int dir, const char *fd, struct drm_client_fdinfo *info,
> 				if (idx > info->last_engine_index)
> 					info->last_engine_index = idx;
> 			}
>-		} else if (!strncmp(l, "drm-total-", 10)) {
>-			idx = parse_region(l, info, strlen("drm-total-"),
>+		} else if (strstartswith(l, "drm-total-", &keylen)) {
>+			idx = parse_region(l, info, keylen,
> 					   region_map, region_entries, &val);
> 			UPDATE_REGION(idx, total, val);
>-		} else if (!strncmp(l, "drm-shared-", 11)) {
>-			idx = parse_region(l, info, strlen("drm-shared-"),
>+		} else if (strstartswith(l, "drm-shared-", &keylen)) {
>+			idx = parse_region(l, info, keylen,
> 					   region_map, region_entries, &val);
> 			UPDATE_REGION(idx, shared, val);
>-
>-		} else if (!strncmp(l, "drm-resident-", 13)) {
>-			idx = parse_region(l, info, strlen("drm-resident-"),
>+		} else if (strstartswith(l, "drm-resident-", &keylen)) {
>+			idx = parse_region(l, info, keylen,
> 					   region_map, region_entries, &val);
> 			UPDATE_REGION(idx, resident, val);
>-		} else if (!strncmp(l, "drm-purgeable-", 14)) {
>-			idx = parse_region(l, info, strlen("drm-purgeable-"),
>+		} else if (strstartswith(l, "drm-purgeable-", &keylen)) {
>+			idx = parse_region(l, info, keylen,
> 					   region_map, region_entries, &val);
> 			UPDATE_REGION(idx, purgeable, val);
>-		} else if (!strncmp(l, "drm-active-", 11)) {
>-			idx = parse_region(l, info, strlen("drm-active-"),
>+		} else if (strstartswith(l, "drm-active-", &keylen)) {
>+			idx = parse_region(l, info, keylen,
> 					   region_map, region_entries, &val);
> 			UPDATE_REGION(idx, active, val);
> 		}
>-- 
>2.44.0
>

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

* Re: [PATCH i-g-t 03/12] lib/igt_drm_fdinfo: Fix wrong name len assert
  2024-04-05  6:00 ` [PATCH i-g-t 03/12] lib/igt_drm_fdinfo: Fix wrong name len assert Lucas De Marchi
@ 2024-04-18 22:25   ` Umesh Nerlige Ramappa
  2024-04-19  7:48   ` Tvrtko Ursulin
  1 sibling, 0 replies; 33+ messages in thread
From: Umesh Nerlige Ramappa @ 2024-04-18 22:25 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: igt-dev, Tvrtko Ursulin

On Fri, Apr 05, 2024 at 01:00:47AM -0500, Lucas De Marchi wrote:
>When parsing engine name, at this point we have something like:
>
>	"drm-engine-render:	232409619162 ns"
>	            ^      ^
>	            |      |
>	          name     p
>
>We are copying the engine name to the final destination, but
>strlen(name) will actually contain the entire string. Since we already
>know the name length, calculated previously, just use it for copying the
>string.
>
>Since each name is 256-bytes long, the assert doesn't trigger easily,
>but it's better to be correct. And more efficient.

Agree,
Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>

>
>Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
>---
> lib/igt_drm_fdinfo.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
>diff --git a/lib/igt_drm_fdinfo.c b/lib/igt_drm_fdinfo.c
>index 7a9ae94f0..9b1776775 100644
>--- a/lib/igt_drm_fdinfo.c
>+++ b/lib/igt_drm_fdinfo.c
>@@ -96,8 +96,9 @@ static int parse_engine(const char *name, struct drm_client_fdinfo *info,
>
> 		if (found < 0) {
> 			assert((info->num_engines + 1) < ARRAY_SIZE(info->names));
>-			assert((strlen(name) + 1) < sizeof(info->names[0]));
>-			strncpy(info->names[info->num_engines], name, name_len);
>+			assert(name_len  < sizeof(info->names[0]));
>+			memcpy(info->names[info->num_engines], name, name_len);
>+			info->names[info->num_engines][name_len] = '\0';
> 			found = info->num_engines;
> 		}
> 	}
>-- 
>2.44.0
>

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

* Re: [PATCH i-g-t 04/12] lib/igt_drm_fdinfo: Assert pdev is not truncated
  2024-04-05  6:00 ` [PATCH i-g-t 04/12] lib/igt_drm_fdinfo: Assert pdev is not truncated Lucas De Marchi
@ 2024-04-18 22:27   ` Umesh Nerlige Ramappa
  0 siblings, 0 replies; 33+ messages in thread
From: Umesh Nerlige Ramappa @ 2024-04-18 22:27 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: igt-dev, Tvrtko Ursulin

On Fri, Apr 05, 2024 at 01:00:48AM -0500, Lucas De Marchi wrote:
>Since strncpy() may truncate the output, just assert we have enough
>room for the string. It's not a big problem since we always copy 1 byte
>less than the capacity and info->pdev is zero-allocated. But we may as
>well be sure we aren't truncating it.
>
>Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>

Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>

>---
> lib/igt_drm_fdinfo.c | 1 +
> 1 file changed, 1 insertion(+)
>
>diff --git a/lib/igt_drm_fdinfo.c b/lib/igt_drm_fdinfo.c
>index 9b1776775..de1962efa 100644
>--- a/lib/igt_drm_fdinfo.c
>+++ b/lib/igt_drm_fdinfo.c
>@@ -237,6 +237,7 @@ __igt_parse_drm_fdinfo(int dir, const char *fd, struct drm_client_fdinfo *info,
> 		} else if (strstartswith(l, "drm-pdev:", &keylen)) {
> 			v = l + keylen;
> 			v = ignore_space(v);
>+			assert(strlen(v) < sizeof(info->pdev));
> 			strncpy(info->pdev, v, sizeof(info->pdev) - 1);
> 		} else if (strstartswith(l, "drm-engine-capacity-", &keylen)) {
> 			idx = parse_engine(l + keylen, info,
>-- 
>2.44.0
>

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

* Re: [PATCH i-g-t 05/12] lib/igt_drm_fdinfo: Detect invalid drm-client-id
  2024-04-05  6:00 ` [PATCH i-g-t 05/12] lib/igt_drm_fdinfo: Detect invalid drm-client-id Lucas De Marchi
@ 2024-04-18 22:31   ` Umesh Nerlige Ramappa
  0 siblings, 0 replies; 33+ messages in thread
From: Umesh Nerlige Ramappa @ 2024-04-18 22:31 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: igt-dev, Tvrtko Ursulin

On Fri, Apr 05, 2024 at 01:00:49AM -0500, Lucas De Marchi wrote:
>Use strtol() for string to long conversion which allows us to detect if
>there was an invalid number. It also has the advantage that it already
>ignores leading spaces.
>
>Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
>---
> lib/igt_drm_fdinfo.c | 7 +++----
> 1 file changed, 3 insertions(+), 4 deletions(-)
>
>diff --git a/lib/igt_drm_fdinfo.c b/lib/igt_drm_fdinfo.c
>index de1962efa..8eb5e5eed 100644
>--- a/lib/igt_drm_fdinfo.c
>+++ b/lib/igt_drm_fdinfo.c
>@@ -216,6 +216,7 @@ __igt_parse_drm_fdinfo(int dir, const char *fd, struct drm_client_fdinfo *info,
> 		uint64_t val = 0;
> 		size_t keylen;
> 		const char *v;
>+		char *end_ptr;
> 		int idx;
>
> 		_buf = NULL;
>@@ -229,11 +230,9 @@ __igt_parse_drm_fdinfo(int dir, const char *fd, struct drm_client_fdinfo *info,
> 			}
> 		}  else if (strstartswith(l, "drm-client-id:", &keylen)) {
> 			v = l + keylen;
>-			v = ignore_space(v);
>-			if (*v) {
>-				info->id = atol(v);
>+			info->id = strtol(v, &end_ptr, 10);
>+			if (end_ptr != v)
> 				good++;
>-			}

Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>

> 		} else if (strstartswith(l, "drm-pdev:", &keylen)) {
> 			v = l + keylen;
> 			v = ignore_space(v);
>-- 
>2.44.0
>

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

* Re: [PATCH i-g-t 06/12] lib/igt_drm_fdinfo: Stop ignoring space where not needed
  2024-04-05  6:00 ` [PATCH i-g-t 06/12] lib/igt_drm_fdinfo: Stop ignoring space where not needed Lucas De Marchi
@ 2024-04-18 22:34   ` Umesh Nerlige Ramappa
  0 siblings, 0 replies; 33+ messages in thread
From: Umesh Nerlige Ramappa @ 2024-04-18 22:34 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: igt-dev, Tvrtko Ursulin

On Fri, Apr 05, 2024 at 01:00:50AM -0500, Lucas De Marchi wrote:
>strto[ul]l() family of functions already ignore leading spaces. There's
>no need to be explicit.
>
>Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>

Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>

>---
> lib/igt_drm_fdinfo.c | 5 +----
> 1 file changed, 1 insertion(+), 4 deletions(-)
>
>diff --git a/lib/igt_drm_fdinfo.c b/lib/igt_drm_fdinfo.c
>index 8eb5e5eed..5f05f210e 100644
>--- a/lib/igt_drm_fdinfo.c
>+++ b/lib/igt_drm_fdinfo.c
>@@ -103,10 +103,8 @@ static int parse_engine(const char *name, struct drm_client_fdinfo *info,
> 		}
> 	}
>
>-	if (found >= 0) {
>-		p = ignore_space(p);
>+	if (found >= 0)
> 		*val = strtoull(p, NULL, 10);
>-	}
>
> 	return found;
> }
>@@ -159,7 +157,6 @@ static int parse_region(const char *name, struct drm_client_fdinfo *info,
> 	if (found < 0)
> 		goto out;
>
>-	p = ignore_space(p);
> 	*val = strtoull(p, NULL, 10);
>
> 	p = strchr(p, ' ');
>-- 
>2.44.0
>

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

* Re: [PATCH i-g-t 07/12] lib/igt_drm_fdinfo: Parse unit for engine utilization
  2024-04-05  6:00 ` [PATCH i-g-t 07/12] lib/igt_drm_fdinfo: Parse unit for engine utilization Lucas De Marchi
@ 2024-04-18 22:48   ` Umesh Nerlige Ramappa
  2024-04-19  7:58     ` Tvrtko Ursulin
  0 siblings, 1 reply; 33+ messages in thread
From: Umesh Nerlige Ramappa @ 2024-04-18 22:48 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: igt-dev, Tvrtko Ursulin

On Fri, Apr 05, 2024 at 01:00:51AM -0500, Lucas De Marchi wrote:
>Kernel adds a " ns" at the end of engine utilization. Make sure we parse
>it so we don't fail if there's another suitable unit chosen by the
>driver or another format.
>
>This prepares the ground for xe driver which will use 2 timestamps
>rather than 1 with a different unit, to make sure it's compatible with
>SR-IOV so we don't have to handle the conversion between GPU and CPU
>clock domains.
>
>Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
>---
> lib/igt_drm_fdinfo.c | 22 +++++++++++++++-------
> 1 file changed, 15 insertions(+), 7 deletions(-)
>
>diff --git a/lib/igt_drm_fdinfo.c b/lib/igt_drm_fdinfo.c
>index 5f05f210e..1541a62c9 100644
>--- a/lib/igt_drm_fdinfo.c
>+++ b/lib/igt_drm_fdinfo.c
>@@ -63,9 +63,10 @@ static const char *ignore_space(const char *s)
>
> static int parse_engine(const char *name, struct drm_client_fdinfo *info,
> 			const char **name_map, unsigned int map_entries,
>-			uint64_t *val)
>+			uint64_t *val, const char **unit)
> {
> 	const char *p;
>+	char *end_ptr;
> 	size_t name_len;
> 	int found = -1;
> 	unsigned int i;
>@@ -103,8 +104,15 @@ static int parse_engine(const char *name, struct drm_client_fdinfo *info,
> 		}
> 	}
>
>-	if (found >= 0)
>-		*val = strtoull(p, NULL, 10);
>+	if (found < 0)
>+		return found;
>+
>+	*val = strtoull(p, &end_ptr, 10);
>+	if (p == end_ptr)
>+		return -1;
>+
>+	if (unit)
>+		*unit = end_ptr;
>
> 	return found;
> }
>@@ -212,7 +220,7 @@ __igt_parse_drm_fdinfo(int dir, const char *fd, struct drm_client_fdinfo *info,
> 	while ((l = strtok_r(_buf, "\n", &ctx))) {
> 		uint64_t val = 0;
> 		size_t keylen;
>-		const char *v;
>+		const char *v, *unit;
> 		char *end_ptr;
> 		int idx;
>
>@@ -237,15 +245,15 @@ __igt_parse_drm_fdinfo(int dir, const char *fd, struct drm_client_fdinfo *info,
> 			strncpy(info->pdev, v, sizeof(info->pdev) - 1);
> 		} else if (strstartswith(l, "drm-engine-capacity-", &keylen)) {
> 			idx = parse_engine(l + keylen, info,
>-					   name_map, map_entries, &val);
>+					   name_map, map_entries, &val, NULL);
> 			if (idx >= 0) {
> 				info->capacity[idx] = val;
> 				num_capacity++;
> 			}
> 		} else if (strstartswith(l, "drm-engine-", &keylen)) {
> 			idx = parse_engine(l + keylen, info,
>-					   name_map, map_entries, &val);
>-			if (idx >= 0) {
>+					   name_map, map_entries, &val, &unit);

Should we ignore spaces in unit and then do a strcmp(unit, "ns")? OR are 
we sure that there is just one space prior to unit here?

Either ways,

Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>

Umesh

>+			if (idx >= 0 && !strcmp(unit, " ns")) {
> 				if (!info->capacity[idx])
> 					info->capacity[idx] = 1;
> 				info->busy[idx] = val;
>-- 
>2.44.0
>

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

* Re: [PATCH i-g-t 10/12] gputop: Extract method to update console size
  2024-04-05  6:00 ` [PATCH i-g-t 10/12] gputop: Extract method to update console size Lucas De Marchi
@ 2024-04-18 22:51   ` Umesh Nerlige Ramappa
  0 siblings, 0 replies; 33+ messages in thread
From: Umesh Nerlige Ramappa @ 2024-04-18 22:51 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: igt-dev, Tvrtko Ursulin

On Fri, Apr 05, 2024 at 01:00:54AM -0500, Lucas De Marchi wrote:
>Cleanup the mainloop moving the console size handling to a helper
>functions.
>
>Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>

Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>

>---
> tools/gputop.c | 30 +++++++++++++++++++-----------
> 1 file changed, 19 insertions(+), 11 deletions(-)
>
>diff --git a/tools/gputop.c b/tools/gputop.c
>index b13044b50..1f349b3ed 100644
>--- a/tools/gputop.c
>+++ b/tools/gputop.c
>@@ -243,6 +243,23 @@ static int client_cmp(const void *_a, const void *_b, void *unused)
>
> }
>
>+static void update_console_size(int *w, int *h)
>+{
>+	struct winsize ws = {};
>+
>+	if (ioctl(0, TIOCGWINSZ, &ws) == -1)
>+		return;
>+
>+	*w = ws.ws_col;
>+	*h = ws.ws_row;
>+
>+	if (*w == 0 && *h == 0) {
>+		/* Serial console. */
>+		*w = 80;
>+		*h = 24;
>+	}
>+}
>+
> int main(int argc, char **argv)
> {
> 	unsigned int period_us = 2e6;
>@@ -258,17 +275,8 @@ int main(int argc, char **argv)
> 	for (;;) {
> 		struct igt_drm_client *c, *prevc = NULL;
> 		int i, engine_w = 0, lines = 0;
>-		struct winsize ws;
>-
>-		if (ioctl(0, TIOCGWINSZ, &ws) != -1) {
>-			con_w = ws.ws_col;
>-			con_h = ws.ws_row;
>-			if (con_w == 0 && con_h == 0) {
>-				/* Serial console. */
>-				con_w = 80;
>-				con_h = 24;
>-			}
>-		}
>+
>+		update_console_size(&con_w, &con_h);
>
> 		igt_drm_clients_scan(clients, NULL, NULL, 0, NULL, 0);
> 		igt_drm_clients_sort(clients, client_cmp);
>-- 
>2.44.0
>

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

* Re: [PATCH i-g-t 11/12] gputop: Extract clrscr()
  2024-04-05  6:00 ` [PATCH i-g-t 11/12] gputop: Extract clrscr() Lucas De Marchi
@ 2024-04-18 22:52   ` Umesh Nerlige Ramappa
  0 siblings, 0 replies; 33+ messages in thread
From: Umesh Nerlige Ramappa @ 2024-04-18 22:52 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: igt-dev, Tvrtko Ursulin

On Fri, Apr 05, 2024 at 01:00:55AM -0500, Lucas De Marchi wrote:
>Make it clear what the CSI is doing.
>
>Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>

>---
> tools/gputop.c | 10 +++++++---
> 1 file changed, 7 insertions(+), 3 deletions(-)
>
>diff --git a/tools/gputop.c b/tools/gputop.c
>index 1f349b3ed..ea23e1de5 100644
>--- a/tools/gputop.c
>+++ b/tools/gputop.c
>@@ -260,6 +260,11 @@ static void update_console_size(int *w, int *h)
> 	}
> }
>
>+static void clrscr(void)
>+{
>+	printf("\033[H\033[J");
>+}
>+
> int main(int argc, char **argv)
> {
> 	unsigned int period_us = 2e6;
>@@ -276,12 +281,11 @@ int main(int argc, char **argv)
> 		struct igt_drm_client *c, *prevc = NULL;
> 		int i, engine_w = 0, lines = 0;
>
>-		update_console_size(&con_w, &con_h);
>-
> 		igt_drm_clients_scan(clients, NULL, NULL, 0, NULL, 0);
> 		igt_drm_clients_sort(clients, client_cmp);
>
>-		printf("\033[H\033[J");
>+		update_console_size(&con_w, &con_h);
>+		clrscr();
>
> 		igt_for_each_drm_client(clients, c, i) {
> 			assert(c->status != IGT_DRM_CLIENT_PROBE);
>-- 
>2.44.0
>

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

* Re: [PATCH i-g-t 01/12] lib/igt_drm_fdinfo: Stop passing key twice
  2024-04-05  6:00 ` [PATCH i-g-t 01/12] lib/igt_drm_fdinfo: Stop passing key twice Lucas De Marchi
  2024-04-18 22:14   ` Umesh Nerlige Ramappa
@ 2024-04-19  7:42   ` Tvrtko Ursulin
  2024-04-19 16:35     ` Lucas De Marchi
  1 sibling, 1 reply; 33+ messages in thread
From: Tvrtko Ursulin @ 2024-04-19  7:42 UTC (permalink / raw)
  To: Lucas De Marchi, igt-dev; +Cc: Umesh Nerlige Ramappa


On 05/04/2024 07:00, Lucas De Marchi wrote:
> Change strstartswith() so it also returns the length, which then can be
> used inside the branch when it matches. A good compiler shall optimize
> out the strlen call since the argument is a constant literal.
> 
> With this, the find_kv() is not needed anymore and the difference with
> regard the other branches can be summarized with a new ignore_space()
> helper and the fact it matches the entire key by appending the ':'. The
> helper is added on top of the file so it can be reused later.
> 
> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
> ---
>   lib/igt_drm_fdinfo.c | 87 +++++++++++++++++++++++---------------------
>   1 file changed, 45 insertions(+), 42 deletions(-)
> 
> diff --git a/lib/igt_drm_fdinfo.c b/lib/igt_drm_fdinfo.c
> index 18dbb5d0b..bfc946f24 100644
> --- a/lib/igt_drm_fdinfo.c
> +++ b/lib/igt_drm_fdinfo.c
> @@ -53,6 +53,14 @@ static size_t read_fdinfo(char *buf, const size_t sz, int at, const char *name)
>   	return count > 0 ? count : 0;
>   }
>   
> +static const char *ignore_space(const char *s)
> +{
> +	for (; *s && isspace(*s); s++)
> +		;
> +
> +	return s;
> +}
> +
>   static int parse_engine(char *line, struct drm_client_fdinfo *info,
>   			size_t prefix_len,
>   			const char **name_map, unsigned int map_entries,
> @@ -104,23 +112,6 @@ static int parse_engine(char *line, struct drm_client_fdinfo *info,
>   	return found;
>   }
>   
> -static const char *find_kv(const char *buf, const char *key, size_t keylen)
> -{
> -	const char *p;
> -
> -	if (strncmp(buf, key, keylen))
> -		return NULL;
> -
> -	p = buf + keylen;
> -	if (*p != ':')
> -		return NULL;
> -
> -	for (p++; *p && isspace(*p); p++)
> -		;
> -
> -	return *p ? p : NULL;
> -}
> -
>   static int parse_region(char *line, struct drm_client_fdinfo *info,
>   			size_t prefix_len,
>   			const char **region_map, unsigned int region_entries,
> @@ -205,6 +196,11 @@ out:
>   		}							\
>   	} while (0)
>   
> +#define strstartswith(a, b, plen__) ({					\
> +		*plen__ = strlen(b);					\
> +		strncmp(a, b, *plen__) == 0;				\
> +})

Did it have to be a macro for optimization to work?

> +
>   unsigned int
>   __igt_parse_drm_fdinfo(int dir, const char *fd, struct drm_client_fdinfo *info,
>   		       const char **name_map, unsigned int map_entries,
> @@ -222,31 +218,39 @@ __igt_parse_drm_fdinfo(int dir, const char *fd, struct drm_client_fdinfo *info,
>   
>   	while ((l = strtok_r(_buf, "\n", &ctx))) {
>   		uint64_t val = 0;
> +		size_t keylen;
>   		const char *v;
>   		int idx;
>   
>   		_buf = NULL;
>   
> -		if ((v = find_kv(l, "drm-driver", strlen("drm-driver")))) {
> -			strncpy(info->driver, v, sizeof(info->driver) - 1);
> -			good++;
> -		}  else if ((v = find_kv(l, "drm-client-id",
> -					 strlen("drm-client-id")))) {
> -			info->id = atol(v);
> -			good++;
> -		} else if ((v = find_kv(l, "drm-pdev", strlen("drm-pdev")))) {
> -			/* optional */
> +		if (strstartswith(l, "drm-driver:", &keylen)) {
> +			v = l + keylen;
> +			v = ignore_space(v);
> +			if (*v) {
> +				strncpy(info->driver, v, sizeof(info->driver) - 1);
> +				good++;
> +			}
> +		}  else if (strstartswith(l, "drm-client-id:", &keylen)) {
> +			v = l + keylen;
> +			v = ignore_space(v);
> +			if (*v) {
> +				info->id = atol(v);
> +				good++;
> +			}
> +		} else if (strstartswith(l, "drm-pdev:", &keylen)) {
> +			v = l + keylen;
> +			v = ignore_space(v);

Removing find_kv looks like a slight negative, given how now all 
branches have to repeat v =  + keylen; v = ignore_space(v).

I wonder if it would work by extending find_kv to allow prefix matching 
mode, something like this (only two branches show to illustrate the modes):

...
		} else if ((v = find_kv(l, "drm-pdev", MATCH_FULL, &keylen))) {
			/* optional */
			strncpy(info->pdev, v, sizeof(info->pdev) - 1);
		} else if (find_kv(l, "drm-engine-capacity-", MATCH_PREFIX)) {
			idx = parse_engine(l, info, keylen,
					   name_map, map_entries, &val);
			if (idx >= 0) {
				info->capacity[idx] = val;
				num_capacity++;
			}
...

?

Regards,

Tvrtko

>   			strncpy(info->pdev, v, sizeof(info->pdev) - 1);
> -		} else if (!strncmp(l, "drm-engine-capacity-", 20)) {
> -			idx = parse_engine(l, info,
> -					   strlen("drm-engine-capacity-"),
> +		} else if (strstartswith(l, "drm-engine-capacity-", &keylen)) {
> +			idx = parse_engine(l, info, keylen,
>   					   name_map, map_entries, &val);
>   			if (idx >= 0) {
>   				info->capacity[idx] = val;
>   				num_capacity++;
>   			}
> -		} else if (!strncmp(l, "drm-engine-", 11)) {
> -			idx = parse_engine(l, info, strlen("drm-engine-"),
> +		} else if (strstartswith(l, "drm-engine-", &keylen)) {
> +			idx = parse_engine(l, info, keylen,
>   					   name_map, map_entries, &val);
>   			if (idx >= 0) {
>   				if (!info->capacity[idx])
> @@ -256,25 +260,24 @@ __igt_parse_drm_fdinfo(int dir, const char *fd, struct drm_client_fdinfo *info,
>   				if (idx > info->last_engine_index)
>   					info->last_engine_index = idx;
>   			}
> -		} else if (!strncmp(l, "drm-total-", 10)) {
> -			idx = parse_region(l, info, strlen("drm-total-"),
> +		} else if (strstartswith(l, "drm-total-", &keylen)) {
> +			idx = parse_region(l, info, keylen,
>   					   region_map, region_entries, &val);
>   			UPDATE_REGION(idx, total, val);
> -		} else if (!strncmp(l, "drm-shared-", 11)) {
> -			idx = parse_region(l, info, strlen("drm-shared-"),
> +		} else if (strstartswith(l, "drm-shared-", &keylen)) {
> +			idx = parse_region(l, info, keylen,
>   					   region_map, region_entries, &val);
>   			UPDATE_REGION(idx, shared, val);
> -
> -		} else if (!strncmp(l, "drm-resident-", 13)) {
> -			idx = parse_region(l, info, strlen("drm-resident-"),
> +		} else if (strstartswith(l, "drm-resident-", &keylen)) {
> +			idx = parse_region(l, info, keylen,
>   					   region_map, region_entries, &val);
>   			UPDATE_REGION(idx, resident, val);
> -		} else if (!strncmp(l, "drm-purgeable-", 14)) {
> -			idx = parse_region(l, info, strlen("drm-purgeable-"),
> +		} else if (strstartswith(l, "drm-purgeable-", &keylen)) {
> +			idx = parse_region(l, info, keylen,
>   					   region_map, region_entries, &val);
>   			UPDATE_REGION(idx, purgeable, val);
> -		} else if (!strncmp(l, "drm-active-", 11)) {
> -			idx = parse_region(l, info, strlen("drm-active-"),
> +		} else if (strstartswith(l, "drm-active-", &keylen)) {
> +			idx = parse_region(l, info, keylen,
>   					   region_map, region_entries, &val);
>   			UPDATE_REGION(idx, active, val);
>   		}

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

* Re: [PATCH i-g-t 03/12] lib/igt_drm_fdinfo: Fix wrong name len assert
  2024-04-05  6:00 ` [PATCH i-g-t 03/12] lib/igt_drm_fdinfo: Fix wrong name len assert Lucas De Marchi
  2024-04-18 22:25   ` Umesh Nerlige Ramappa
@ 2024-04-19  7:48   ` Tvrtko Ursulin
  2024-04-19  7:49     ` Tvrtko Ursulin
  1 sibling, 1 reply; 33+ messages in thread
From: Tvrtko Ursulin @ 2024-04-19  7:48 UTC (permalink / raw)
  To: Lucas De Marchi, igt-dev; +Cc: Umesh Nerlige Ramappa


On 05/04/2024 07:00, Lucas De Marchi wrote:
> When parsing engine name, at this point we have something like:
> 
> 	"drm-engine-render:	232409619162 ns"
> 	            ^      ^
> 	            |      |
> 	          name     p
> 
> We are copying the engine name to the final destination, but
> strlen(name) will actually contain the entire string. Since we already
> know the name length, calculated previously, just use it for copying the
> string.
> 
> Since each name is 256-bytes long, the assert doesn't trigger easily,
> but it's better to be correct. And more efficient.
> 
> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
> ---
>   lib/igt_drm_fdinfo.c | 5 +++--
>   1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/lib/igt_drm_fdinfo.c b/lib/igt_drm_fdinfo.c
> index 7a9ae94f0..9b1776775 100644
> --- a/lib/igt_drm_fdinfo.c
> +++ b/lib/igt_drm_fdinfo.c
> @@ -96,8 +96,9 @@ static int parse_engine(const char *name, struct drm_client_fdinfo *info,
>   
>   		if (found < 0) {
>   			assert((info->num_engines + 1) < ARRAY_SIZE(info->names));
> -			assert((strlen(name) + 1) < sizeof(info->names[0]));
> -			strncpy(info->names[info->num_engines], name, name_len);
> +			assert(name_len  < sizeof(info->names[0]));
> +			memcpy(info->names[info->num_engines], name, name_len);
> +			info->names[info->num_engines][name_len] = '\0';
>   			found = info->num_engines;
>   		}
>   	}

Ah a good fix.

Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>

Also, ideally fixes such as this and next few would be before 
refactoring in the series, but okay, not asking you to re-order.

Regards,

Tvrtko

P.S. One extra space in the assert fwiw.

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

* Re: [PATCH i-g-t 03/12] lib/igt_drm_fdinfo: Fix wrong name len assert
  2024-04-19  7:48   ` Tvrtko Ursulin
@ 2024-04-19  7:49     ` Tvrtko Ursulin
  0 siblings, 0 replies; 33+ messages in thread
From: Tvrtko Ursulin @ 2024-04-19  7:49 UTC (permalink / raw)
  To: Lucas De Marchi, igt-dev; +Cc: Umesh Nerlige Ramappa


On 19/04/2024 08:48, Tvrtko Ursulin wrote:
> 
> On 05/04/2024 07:00, Lucas De Marchi wrote:
>> When parsing engine name, at this point we have something like:
>>
>>     "drm-engine-render:    232409619162 ns"
>>                 ^      ^
>>                 |      |
>>               name     p
>>
>> We are copying the engine name to the final destination, but
>> strlen(name) will actually contain the entire string. Since we already
>> know the name length, calculated previously, just use it for copying the
>> string.
>>
>> Since each name is 256-bytes long, the assert doesn't trigger easily,
>> but it's better to be correct. And more efficient.
>>
>> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
>> ---
>>   lib/igt_drm_fdinfo.c | 5 +++--
>>   1 file changed, 3 insertions(+), 2 deletions(-)
>>
>> diff --git a/lib/igt_drm_fdinfo.c b/lib/igt_drm_fdinfo.c
>> index 7a9ae94f0..9b1776775 100644
>> --- a/lib/igt_drm_fdinfo.c
>> +++ b/lib/igt_drm_fdinfo.c
>> @@ -96,8 +96,9 @@ static int parse_engine(const char *name, struct 
>> drm_client_fdinfo *info,
>>           if (found < 0) {
>>               assert((info->num_engines + 1) < ARRAY_SIZE(info->names));
>> -            assert((strlen(name) + 1) < sizeof(info->names[0]));
>> -            strncpy(info->names[info->num_engines], name, name_len);
>> +            assert(name_len  < sizeof(info->names[0]));
>> +            memcpy(info->names[info->num_engines], name, name_len);
>> +            info->names[info->num_engines][name_len] = '\0';
>>               found = info->num_engines;
>>           }
>>       }
> 
> Ah a good fix.
> 
> Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>

Oooh the muscle memory.. I knew this would happen sooner or later! :))

Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@igalia.com>

Regards,

Tvrtko

> 
> Also, ideally fixes such as this and next few would be before 
> refactoring in the series, but okay, not asking you to re-order.
> 
> Regards,
> 
> Tvrtko
> 
> P.S. One extra space in the assert fwiw.

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

* Re: [PATCH i-g-t 07/12] lib/igt_drm_fdinfo: Parse unit for engine utilization
  2024-04-18 22:48   ` Umesh Nerlige Ramappa
@ 2024-04-19  7:58     ` Tvrtko Ursulin
  2024-04-19 16:21       ` Lucas De Marchi
  0 siblings, 1 reply; 33+ messages in thread
From: Tvrtko Ursulin @ 2024-04-19  7:58 UTC (permalink / raw)
  To: Umesh Nerlige Ramappa, Lucas De Marchi; +Cc: igt-dev


On 18/04/2024 23:48, Umesh Nerlige Ramappa wrote:
> On Fri, Apr 05, 2024 at 01:00:51AM -0500, Lucas De Marchi wrote:
>> Kernel adds a " ns" at the end of engine utilization. Make sure we parse
>> it so we don't fail if there's another suitable unit chosen by the
>> driver or another format.
>>
>> This prepares the ground for xe driver which will use 2 timestamps
>> rather than 1 with a different unit, to make sure it's compatible with
>> SR-IOV so we don't have to handle the conversion between GPU and CPU
>> clock domains.
>>
>> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
>> ---
>> lib/igt_drm_fdinfo.c | 22 +++++++++++++++-------
>> 1 file changed, 15 insertions(+), 7 deletions(-)
>>
>> diff --git a/lib/igt_drm_fdinfo.c b/lib/igt_drm_fdinfo.c
>> index 5f05f210e..1541a62c9 100644
>> --- a/lib/igt_drm_fdinfo.c
>> +++ b/lib/igt_drm_fdinfo.c
>> @@ -63,9 +63,10 @@ static const char *ignore_space(const char *s)
>>
>> static int parse_engine(const char *name, struct drm_client_fdinfo *info,
>>             const char **name_map, unsigned int map_entries,
>> -            uint64_t *val)
>> +            uint64_t *val, const char **unit)
>> {
>>     const char *p;
>> +    char *end_ptr;
>>     size_t name_len;
>>     int found = -1;
>>     unsigned int i;
>> @@ -103,8 +104,15 @@ static int parse_engine(const char *name, struct 
>> drm_client_fdinfo *info,
>>         }
>>     }
>>
>> -    if (found >= 0)
>> -        *val = strtoull(p, NULL, 10);
>> +    if (found < 0)
>> +        return found;
>> +
>> +    *val = strtoull(p, &end_ptr, 10);
>> +    if (p == end_ptr)
>> +        return -1;
>> +
>> +    if (unit)
>> +        *unit = end_ptr;
>>
>>     return found;
>> }
>> @@ -212,7 +220,7 @@ __igt_parse_drm_fdinfo(int dir, const char *fd, 
>> struct drm_client_fdinfo *info,
>>     while ((l = strtok_r(_buf, "\n", &ctx))) {
>>         uint64_t val = 0;
>>         size_t keylen;
>> -        const char *v;
>> +        const char *v, *unit;
>>         char *end_ptr;
>>         int idx;
>>
>> @@ -237,15 +245,15 @@ __igt_parse_drm_fdinfo(int dir, const char *fd, 
>> struct drm_client_fdinfo *info,
>>             strncpy(info->pdev, v, sizeof(info->pdev) - 1);
>>         } else if (strstartswith(l, "drm-engine-capacity-", &keylen)) {
>>             idx = parse_engine(l + keylen, info,
>> -                       name_map, map_entries, &val);
>> +                       name_map, map_entries, &val, NULL);
>>             if (idx >= 0) {
>>                 info->capacity[idx] = val;
>>                 num_capacity++;
>>             }
>>         } else if (strstartswith(l, "drm-engine-", &keylen)) {
>>             idx = parse_engine(l + keylen, info,
>> -                       name_map, map_entries, &val);
>> -            if (idx >= 0) {
>> +                       name_map, map_entries, &val, &unit);
> 
> Should we ignore spaces in unit and then do a strcmp(unit, "ns")? OR are 
> we sure that there is just one space prior to unit here?

Any type and number of whitespace shouldbe handled.

I guess in drm-usage-stats.rst this needs to be improved:

"""
- Whitespace between the delimiter and first non-whitespace character 
shall be
   ignored when parsing.
- Keys are not allowed to contain whitespace characters.
- Numerical key value pairs can end with optional unit string.
"""

Perhaps append:

- Whitespace between the value and the unit shall be ignored when parsing.

Regards,

Tvrtko

> 
> Either ways,
> 
> Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
> 
> Umesh
> 
>> +            if (idx >= 0 && !strcmp(unit, " ns")) {
>>                 if (!info->capacity[idx])
>>                     info->capacity[idx] = 1;
>>                 info->busy[idx] = val;
>> -- 
>> 2.44.0
>>

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

* Re: [PATCH i-g-t 07/12] lib/igt_drm_fdinfo: Parse unit for engine utilization
  2024-04-19  7:58     ` Tvrtko Ursulin
@ 2024-04-19 16:21       ` Lucas De Marchi
  2024-04-19 18:32         ` Tvrtko Ursulin
  0 siblings, 1 reply; 33+ messages in thread
From: Lucas De Marchi @ 2024-04-19 16:21 UTC (permalink / raw)
  To: Tvrtko Ursulin; +Cc: Umesh Nerlige Ramappa, igt-dev

On Fri, Apr 19, 2024 at 08:58:25AM GMT, Tvrtko Ursulin wrote:
>
>On 18/04/2024 23:48, Umesh Nerlige Ramappa wrote:
>>On Fri, Apr 05, 2024 at 01:00:51AM -0500, Lucas De Marchi wrote:
>>>Kernel adds a " ns" at the end of engine utilization. Make sure we parse
>>>it so we don't fail if there's another suitable unit chosen by the
>>>driver or another format.
>>>
>>>This prepares the ground for xe driver which will use 2 timestamps
>>>rather than 1 with a different unit, to make sure it's compatible with
>>>SR-IOV so we don't have to handle the conversion between GPU and CPU
>>>clock domains.
>>>
>>>Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
>>>---
>>>lib/igt_drm_fdinfo.c | 22 +++++++++++++++-------
>>>1 file changed, 15 insertions(+), 7 deletions(-)
>>>
>>>diff --git a/lib/igt_drm_fdinfo.c b/lib/igt_drm_fdinfo.c
>>>index 5f05f210e..1541a62c9 100644
>>>--- a/lib/igt_drm_fdinfo.c
>>>+++ b/lib/igt_drm_fdinfo.c
>>>@@ -63,9 +63,10 @@ static const char *ignore_space(const char *s)
>>>
>>>static int parse_engine(const char *name, struct drm_client_fdinfo *info,
>>>            const char **name_map, unsigned int map_entries,
>>>-            uint64_t *val)
>>>+            uint64_t *val, const char **unit)
>>>{
>>>    const char *p;
>>>+    char *end_ptr;
>>>    size_t name_len;
>>>    int found = -1;
>>>    unsigned int i;
>>>@@ -103,8 +104,15 @@ static int parse_engine(const char *name, 
>>>struct drm_client_fdinfo *info,
>>>        }
>>>    }
>>>
>>>-    if (found >= 0)
>>>-        *val = strtoull(p, NULL, 10);
>>>+    if (found < 0)
>>>+        return found;
>>>+
>>>+    *val = strtoull(p, &end_ptr, 10);
>>>+    if (p == end_ptr)
>>>+        return -1;
>>>+
>>>+    if (unit)
>>>+        *unit = end_ptr;
>>>
>>>    return found;
>>>}
>>>@@ -212,7 +220,7 @@ __igt_parse_drm_fdinfo(int dir, const char 
>>>*fd, struct drm_client_fdinfo *info,
>>>    while ((l = strtok_r(_buf, "\n", &ctx))) {
>>>        uint64_t val = 0;
>>>        size_t keylen;
>>>-        const char *v;
>>>+        const char *v, *unit;
>>>        char *end_ptr;
>>>        int idx;
>>>
>>>@@ -237,15 +245,15 @@ __igt_parse_drm_fdinfo(int dir, const char 
>>>*fd, struct drm_client_fdinfo *info,
>>>            strncpy(info->pdev, v, sizeof(info->pdev) - 1);
>>>        } else if (strstartswith(l, "drm-engine-capacity-", &keylen)) {
>>>            idx = parse_engine(l + keylen, info,
>>>-                       name_map, map_entries, &val);
>>>+                       name_map, map_entries, &val, NULL);
>>>            if (idx >= 0) {
>>>                info->capacity[idx] = val;
>>>                num_capacity++;
>>>            }
>>>        } else if (strstartswith(l, "drm-engine-", &keylen)) {
>>>            idx = parse_engine(l + keylen, info,
>>>-                       name_map, map_entries, &val);
>>>-            if (idx >= 0) {
>>>+                       name_map, map_entries, &val, &unit);
>>
>>Should we ignore spaces in unit and then do a strcmp(unit, "ns")? OR 
>>are we sure that there is just one space prior to unit here?
>
>Any type and number of whitespace shouldbe handled.

I can change this in igt, but...

>
>I guess in drm-usage-stats.rst this needs to be improved:
>
>"""
>- Whitespace between the delimiter and first non-whitespace character 
>shall be
>  ignored when parsing.
>- Keys are not allowed to contain whitespace characters.
>- Numerical key value pairs can end with optional unit string.
>"""
>
>Perhaps append:
>
>- Whitespace between the value and the unit shall be ignored when parsing.

that would break userspace. Both nvtop and htop already do a strcmp
with " ns". nvtop seems to use it for specific platforms (so as long as
we don't change the existing one, it wouldn't break), but htop just
handles that as "GPUs in Linux".

Lucas De Marchi

>
>Regards,
>
>Tvrtko
>
>>
>>Either ways,
>>
>>Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
>>
>>Umesh
>>
>>>+            if (idx >= 0 && !strcmp(unit, " ns")) {
>>>                if (!info->capacity[idx])
>>>                    info->capacity[idx] = 1;
>>>                info->busy[idx] = val;
>>>-- 
>>>2.44.0
>>>

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

* Re: [PATCH i-g-t 01/12] lib/igt_drm_fdinfo: Stop passing key twice
  2024-04-19  7:42   ` Tvrtko Ursulin
@ 2024-04-19 16:35     ` Lucas De Marchi
  2024-04-19 18:34       ` Tvrtko Ursulin
  0 siblings, 1 reply; 33+ messages in thread
From: Lucas De Marchi @ 2024-04-19 16:35 UTC (permalink / raw)
  To: Tvrtko Ursulin; +Cc: igt-dev, Umesh Nerlige Ramappa

On Fri, Apr 19, 2024 at 08:42:50AM GMT, Tvrtko Ursulin wrote:
>
>On 05/04/2024 07:00, Lucas De Marchi wrote:
>>Change strstartswith() so it also returns the length, which then can be
>>used inside the branch when it matches. A good compiler shall optimize
>>out the strlen call since the argument is a constant literal.
>>
>>With this, the find_kv() is not needed anymore and the difference with
>>regard the other branches can be summarized with a new ignore_space()
>>helper and the fact it matches the entire key by appending the ':'. The
>>helper is added on top of the file so it can be reused later.
>>
>>Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
>>---
>>  lib/igt_drm_fdinfo.c | 87 +++++++++++++++++++++++---------------------
>>  1 file changed, 45 insertions(+), 42 deletions(-)
>>
>>diff --git a/lib/igt_drm_fdinfo.c b/lib/igt_drm_fdinfo.c
>>index 18dbb5d0b..bfc946f24 100644
>>--- a/lib/igt_drm_fdinfo.c
>>+++ b/lib/igt_drm_fdinfo.c
>>@@ -53,6 +53,14 @@ static size_t read_fdinfo(char *buf, const size_t sz, int at, const char *name)
>>  	return count > 0 ? count : 0;
>>  }
>>+static const char *ignore_space(const char *s)
>>+{
>>+	for (; *s && isspace(*s); s++)
>>+		;
>>+
>>+	return s;
>>+}
>>+
>>  static int parse_engine(char *line, struct drm_client_fdinfo *info,
>>  			size_t prefix_len,
>>  			const char **name_map, unsigned int map_entries,
>>@@ -104,23 +112,6 @@ static int parse_engine(char *line, struct drm_client_fdinfo *info,
>>  	return found;
>>  }
>>-static const char *find_kv(const char *buf, const char *key, size_t keylen)
>>-{
>>-	const char *p;
>>-
>>-	if (strncmp(buf, key, keylen))
>>-		return NULL;
>>-
>>-	p = buf + keylen;
>>-	if (*p != ':')
>>-		return NULL;
>>-
>>-	for (p++; *p && isspace(*p); p++)
>>-		;
>>-
>>-	return *p ? p : NULL;
>>-}
>>-
>>  static int parse_region(char *line, struct drm_client_fdinfo *info,
>>  			size_t prefix_len,
>>  			const char **region_map, unsigned int region_entries,
>>@@ -205,6 +196,11 @@ out:
>>  		}							\
>>  	} while (0)
>>+#define strstartswith(a, b, plen__) ({					\
>>+		*plen__ = strlen(b);					\
>>+		strncmp(a, b, *plen__) == 0;				\
>>+})
>
>Did it have to be a macro for optimization to work?

if it's a function, it won't be handled as a string literal anymore and
may be a real strlen() call.  The compiler may or may not detect that.

>
>>+
>>  unsigned int
>>  __igt_parse_drm_fdinfo(int dir, const char *fd, struct drm_client_fdinfo *info,
>>  		       const char **name_map, unsigned int map_entries,
>>@@ -222,31 +218,39 @@ __igt_parse_drm_fdinfo(int dir, const char *fd, struct drm_client_fdinfo *info,
>>  	while ((l = strtok_r(_buf, "\n", &ctx))) {
>>  		uint64_t val = 0;
>>+		size_t keylen;
>>  		const char *v;
>>  		int idx;
>>  		_buf = NULL;
>>-		if ((v = find_kv(l, "drm-driver", strlen("drm-driver")))) {
>>-			strncpy(info->driver, v, sizeof(info->driver) - 1);
>>-			good++;
>>-		}  else if ((v = find_kv(l, "drm-client-id",
>>-					 strlen("drm-client-id")))) {
>>-			info->id = atol(v);
>>-			good++;
>>-		} else if ((v = find_kv(l, "drm-pdev", strlen("drm-pdev")))) {
>>-			/* optional */
>>+		if (strstartswith(l, "drm-driver:", &keylen)) {
>>+			v = l + keylen;
>>+			v = ignore_space(v);
>>+			if (*v) {
>>+				strncpy(info->driver, v, sizeof(info->driver) - 1);
>>+				good++;
>>+			}
>>+		}  else if (strstartswith(l, "drm-client-id:", &keylen)) {
>>+			v = l + keylen;
>>+			v = ignore_space(v);
>>+			if (*v) {
>>+				info->id = atol(v);
>>+				good++;
>>+			}
>>+		} else if (strstartswith(l, "drm-pdev:", &keylen)) {
>>+			v = l + keylen;
>>+			v = ignore_space(v);
>
>Removing find_kv looks like a slight negative, given how now all 
>branches have to repeat v =  + keylen; v = ignore_space(v).

the ignore_space() is later removed (my bad on the patch split here
since I only noticed later when converting to strtoull())

>
>I wonder if it would work by extending find_kv to allow prefix 
>matching mode, something like this (only two branches show to 
>illustrate the modes):
>
>...
>		} else if ((v = find_kv(l, "drm-pdev", MATCH_FULL, &keylen))) {

with the downside that then there will be a real strlen() on the key.

I can try playing with the patches to bring find_kv() back.

Lucas De Marchi

>			/* optional */
>			strncpy(info->pdev, v, sizeof(info->pdev) - 1);
>		} else if (find_kv(l, "drm-engine-capacity-", MATCH_PREFIX)) {
>			idx = parse_engine(l, info, keylen,
>					   name_map, map_entries, &val);
>			if (idx >= 0) {
>				info->capacity[idx] = val;
>				num_capacity++;
>			}
>...
>
>?
>
>Regards,
>
>Tvrtko
>
>>  			strncpy(info->pdev, v, sizeof(info->pdev) - 1);
>>-		} else if (!strncmp(l, "drm-engine-capacity-", 20)) {
>>-			idx = parse_engine(l, info,
>>-					   strlen("drm-engine-capacity-"),
>>+		} else if (strstartswith(l, "drm-engine-capacity-", &keylen)) {
>>+			idx = parse_engine(l, info, keylen,
>>  					   name_map, map_entries, &val);
>>  			if (idx >= 0) {
>>  				info->capacity[idx] = val;
>>  				num_capacity++;
>>  			}
>>-		} else if (!strncmp(l, "drm-engine-", 11)) {
>>-			idx = parse_engine(l, info, strlen("drm-engine-"),
>>+		} else if (strstartswith(l, "drm-engine-", &keylen)) {
>>+			idx = parse_engine(l, info, keylen,
>>  					   name_map, map_entries, &val);
>>  			if (idx >= 0) {
>>  				if (!info->capacity[idx])
>>@@ -256,25 +260,24 @@ __igt_parse_drm_fdinfo(int dir, const char *fd, struct drm_client_fdinfo *info,
>>  				if (idx > info->last_engine_index)
>>  					info->last_engine_index = idx;
>>  			}
>>-		} else if (!strncmp(l, "drm-total-", 10)) {
>>-			idx = parse_region(l, info, strlen("drm-total-"),
>>+		} else if (strstartswith(l, "drm-total-", &keylen)) {
>>+			idx = parse_region(l, info, keylen,
>>  					   region_map, region_entries, &val);
>>  			UPDATE_REGION(idx, total, val);
>>-		} else if (!strncmp(l, "drm-shared-", 11)) {
>>-			idx = parse_region(l, info, strlen("drm-shared-"),
>>+		} else if (strstartswith(l, "drm-shared-", &keylen)) {
>>+			idx = parse_region(l, info, keylen,
>>  					   region_map, region_entries, &val);
>>  			UPDATE_REGION(idx, shared, val);
>>-
>>-		} else if (!strncmp(l, "drm-resident-", 13)) {
>>-			idx = parse_region(l, info, strlen("drm-resident-"),
>>+		} else if (strstartswith(l, "drm-resident-", &keylen)) {
>>+			idx = parse_region(l, info, keylen,
>>  					   region_map, region_entries, &val);
>>  			UPDATE_REGION(idx, resident, val);
>>-		} else if (!strncmp(l, "drm-purgeable-", 14)) {
>>-			idx = parse_region(l, info, strlen("drm-purgeable-"),
>>+		} else if (strstartswith(l, "drm-purgeable-", &keylen)) {
>>+			idx = parse_region(l, info, keylen,
>>  					   region_map, region_entries, &val);
>>  			UPDATE_REGION(idx, purgeable, val);
>>-		} else if (!strncmp(l, "drm-active-", 11)) {
>>-			idx = parse_region(l, info, strlen("drm-active-"),
>>+		} else if (strstartswith(l, "drm-active-", &keylen)) {
>>+			idx = parse_region(l, info, keylen,
>>  					   region_map, region_entries, &val);
>>  			UPDATE_REGION(idx, active, val);
>>  		}

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

* Re: [PATCH i-g-t 07/12] lib/igt_drm_fdinfo: Parse unit for engine utilization
  2024-04-19 16:21       ` Lucas De Marchi
@ 2024-04-19 18:32         ` Tvrtko Ursulin
  0 siblings, 0 replies; 33+ messages in thread
From: Tvrtko Ursulin @ 2024-04-19 18:32 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: Umesh Nerlige Ramappa, igt-dev


On 19/04/2024 17:21, Lucas De Marchi wrote:
> On Fri, Apr 19, 2024 at 08:58:25AM GMT, Tvrtko Ursulin wrote:
>>
>> On 18/04/2024 23:48, Umesh Nerlige Ramappa wrote:
>>> On Fri, Apr 05, 2024 at 01:00:51AM -0500, Lucas De Marchi wrote:
>>>> Kernel adds a " ns" at the end of engine utilization. Make sure we 
>>>> parse
>>>> it so we don't fail if there's another suitable unit chosen by the
>>>> driver or another format.
>>>>
>>>> This prepares the ground for xe driver which will use 2 timestamps
>>>> rather than 1 with a different unit, to make sure it's compatible with
>>>> SR-IOV so we don't have to handle the conversion between GPU and CPU
>>>> clock domains.
>>>>
>>>> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
>>>> ---
>>>> lib/igt_drm_fdinfo.c | 22 +++++++++++++++-------
>>>> 1 file changed, 15 insertions(+), 7 deletions(-)
>>>>
>>>> diff --git a/lib/igt_drm_fdinfo.c b/lib/igt_drm_fdinfo.c
>>>> index 5f05f210e..1541a62c9 100644
>>>> --- a/lib/igt_drm_fdinfo.c
>>>> +++ b/lib/igt_drm_fdinfo.c
>>>> @@ -63,9 +63,10 @@ static const char *ignore_space(const char *s)
>>>>
>>>> static int parse_engine(const char *name, struct drm_client_fdinfo 
>>>> *info,
>>>>             const char **name_map, unsigned int map_entries,
>>>> -            uint64_t *val)
>>>> +            uint64_t *val, const char **unit)
>>>> {
>>>>     const char *p;
>>>> +    char *end_ptr;
>>>>     size_t name_len;
>>>>     int found = -1;
>>>>     unsigned int i;
>>>> @@ -103,8 +104,15 @@ static int parse_engine(const char *name, 
>>>> struct drm_client_fdinfo *info,
>>>>         }
>>>>     }
>>>>
>>>> -    if (found >= 0)
>>>> -        *val = strtoull(p, NULL, 10);
>>>> +    if (found < 0)
>>>> +        return found;
>>>> +
>>>> +    *val = strtoull(p, &end_ptr, 10);
>>>> +    if (p == end_ptr)
>>>> +        return -1;
>>>> +
>>>> +    if (unit)
>>>> +        *unit = end_ptr;
>>>>
>>>>     return found;
>>>> }
>>>> @@ -212,7 +220,7 @@ __igt_parse_drm_fdinfo(int dir, const char *fd, 
>>>> struct drm_client_fdinfo *info,
>>>>     while ((l = strtok_r(_buf, "\n", &ctx))) {
>>>>         uint64_t val = 0;
>>>>         size_t keylen;
>>>> -        const char *v;
>>>> +        const char *v, *unit;
>>>>         char *end_ptr;
>>>>         int idx;
>>>>
>>>> @@ -237,15 +245,15 @@ __igt_parse_drm_fdinfo(int dir, const char 
>>>> *fd, struct drm_client_fdinfo *info,
>>>>             strncpy(info->pdev, v, sizeof(info->pdev) - 1);
>>>>         } else if (strstartswith(l, "drm-engine-capacity-", &keylen)) {
>>>>             idx = parse_engine(l + keylen, info,
>>>> -                       name_map, map_entries, &val);
>>>> +                       name_map, map_entries, &val, NULL);
>>>>             if (idx >= 0) {
>>>>                 info->capacity[idx] = val;
>>>>                 num_capacity++;
>>>>             }
>>>>         } else if (strstartswith(l, "drm-engine-", &keylen)) {
>>>>             idx = parse_engine(l + keylen, info,
>>>> -                       name_map, map_entries, &val);
>>>> -            if (idx >= 0) {
>>>> +                       name_map, map_entries, &val, &unit);
>>>
>>> Should we ignore spaces in unit and then do a strcmp(unit, "ns")? OR 
>>> are we sure that there is just one space prior to unit here?
>>
>> Any type and number of whitespace shouldbe handled.
> 
> I can change this in igt, but...
> 
>>
>> I guess in drm-usage-stats.rst this needs to be improved:
>>
>> """
>> - Whitespace between the delimiter and first non-whitespace character 
>> shall be
>>  ignored when parsing.
>> - Keys are not allowed to contain whitespace characters.
>> - Numerical key value pairs can end with optional unit string.
>> """
>>
>> Perhaps append:
>>
>> - Whitespace between the value and the unit shall be ignored when 
>> parsing.
> 
> that would break userspace. Both nvtop and htop already do a strcmp
> with " ns". nvtop seems to use it for specific platforms (so as long as
> we don't change the existing one, it wouldn't break), but htop just
> handles that as "GPUs in Linux".

The joys of text formats failing to deliver flexibility. Might as well 
use binary..

Strictly speaking changing the spec would not break anything, as long as 
existing kernel side implementation stays. It would just ensure future 
implementation (on both sides) can be flexible and have been warned.

Regards,

Tvrtko

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

* Re: [PATCH i-g-t 01/12] lib/igt_drm_fdinfo: Stop passing key twice
  2024-04-19 16:35     ` Lucas De Marchi
@ 2024-04-19 18:34       ` Tvrtko Ursulin
  0 siblings, 0 replies; 33+ messages in thread
From: Tvrtko Ursulin @ 2024-04-19 18:34 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: igt-dev, Umesh Nerlige Ramappa


On 19/04/2024 17:35, Lucas De Marchi wrote:
> On Fri, Apr 19, 2024 at 08:42:50AM GMT, Tvrtko Ursulin wrote:
>>
>> On 05/04/2024 07:00, Lucas De Marchi wrote:
>>> Change strstartswith() so it also returns the length, which then can be
>>> used inside the branch when it matches. A good compiler shall optimize
>>> out the strlen call since the argument is a constant literal.
>>>
>>> With this, the find_kv() is not needed anymore and the difference with
>>> regard the other branches can be summarized with a new ignore_space()
>>> helper and the fact it matches the entire key by appending the ':'. The
>>> helper is added on top of the file so it can be reused later.
>>>
>>> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
>>> ---
>>>  lib/igt_drm_fdinfo.c | 87 +++++++++++++++++++++++---------------------
>>>  1 file changed, 45 insertions(+), 42 deletions(-)
>>>
>>> diff --git a/lib/igt_drm_fdinfo.c b/lib/igt_drm_fdinfo.c
>>> index 18dbb5d0b..bfc946f24 100644
>>> --- a/lib/igt_drm_fdinfo.c
>>> +++ b/lib/igt_drm_fdinfo.c
>>> @@ -53,6 +53,14 @@ static size_t read_fdinfo(char *buf, const size_t 
>>> sz, int at, const char *name)
>>>      return count > 0 ? count : 0;
>>>  }
>>> +static const char *ignore_space(const char *s)
>>> +{
>>> +    for (; *s && isspace(*s); s++)
>>> +        ;
>>> +
>>> +    return s;
>>> +}
>>> +
>>>  static int parse_engine(char *line, struct drm_client_fdinfo *info,
>>>              size_t prefix_len,
>>>              const char **name_map, unsigned int map_entries,
>>> @@ -104,23 +112,6 @@ static int parse_engine(char *line, struct 
>>> drm_client_fdinfo *info,
>>>      return found;
>>>  }
>>> -static const char *find_kv(const char *buf, const char *key, size_t 
>>> keylen)
>>> -{
>>> -    const char *p;
>>> -
>>> -    if (strncmp(buf, key, keylen))
>>> -        return NULL;
>>> -
>>> -    p = buf + keylen;
>>> -    if (*p != ':')
>>> -        return NULL;
>>> -
>>> -    for (p++; *p && isspace(*p); p++)
>>> -        ;
>>> -
>>> -    return *p ? p : NULL;
>>> -}
>>> -
>>>  static int parse_region(char *line, struct drm_client_fdinfo *info,
>>>              size_t prefix_len,
>>>              const char **region_map, unsigned int region_entries,
>>> @@ -205,6 +196,11 @@ out:
>>>          }                            \
>>>      } while (0)
>>> +#define strstartswith(a, b, plen__) ({                    \
>>> +        *plen__ = strlen(b);                    \
>>> +        strncmp(a, b, *plen__) == 0;                \
>>> +})
>>
>> Did it have to be a macro for optimization to work?
> 
> if it's a function, it won't be handled as a string literal anymore and
> may be a real strlen() call.  The compiler may or may not detect that.
> 
>>
>>> +
>>>  unsigned int
>>>  __igt_parse_drm_fdinfo(int dir, const char *fd, struct 
>>> drm_client_fdinfo *info,
>>>                 const char **name_map, unsigned int map_entries,
>>> @@ -222,31 +218,39 @@ __igt_parse_drm_fdinfo(int dir, const char *fd, 
>>> struct drm_client_fdinfo *info,
>>>      while ((l = strtok_r(_buf, "\n", &ctx))) {
>>>          uint64_t val = 0;
>>> +        size_t keylen;
>>>          const char *v;
>>>          int idx;
>>>          _buf = NULL;
>>> -        if ((v = find_kv(l, "drm-driver", strlen("drm-driver")))) {
>>> -            strncpy(info->driver, v, sizeof(info->driver) - 1);
>>> -            good++;
>>> -        }  else if ((v = find_kv(l, "drm-client-id",
>>> -                     strlen("drm-client-id")))) {
>>> -            info->id = atol(v);
>>> -            good++;
>>> -        } else if ((v = find_kv(l, "drm-pdev", strlen("drm-pdev")))) {
>>> -            /* optional */
>>> +        if (strstartswith(l, "drm-driver:", &keylen)) {
>>> +            v = l + keylen;
>>> +            v = ignore_space(v);
>>> +            if (*v) {
>>> +                strncpy(info->driver, v, sizeof(info->driver) - 1);
>>> +                good++;
>>> +            }
>>> +        }  else if (strstartswith(l, "drm-client-id:", &keylen)) {
>>> +            v = l + keylen;
>>> +            v = ignore_space(v);
>>> +            if (*v) {
>>> +                info->id = atol(v);
>>> +                good++;
>>> +            }
>>> +        } else if (strstartswith(l, "drm-pdev:", &keylen)) {
>>> +            v = l + keylen;
>>> +            v = ignore_space(v);
>>
>> Removing find_kv looks like a slight negative, given how now all 
>> branches have to repeat v =  + keylen; v = ignore_space(v).
> 
> the ignore_space() is later removed (my bad on the patch split here
> since I only noticed later when converting to strtoull())
> 
>>
>> I wonder if it would work by extending find_kv to allow prefix 
>> matching mode, something like this (only two branches show to 
>> illustrate the modes):
>>
>> ...
>>         } else if ((v = find_kv(l, "drm-pdev", MATCH_FULL, &keylen))) {
> 
> with the downside that then there will be a real strlen() on the key.

I thought you said it worked. And I thought I tried and saw it working. 
Bummer..

> I can try playing with the patches to bring find_kv() back.

If you don't see any readability savings by the end of the series then 
don't bother.

Regards,

Tvrtko

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

end of thread, other threads:[~2024-04-19 18:34 UTC | newest]

Thread overview: 33+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-04-05  6:00 [PATCH i-g-t 00/12] gputop: Add support for xe Lucas De Marchi
2024-04-05  6:00 ` [PATCH i-g-t 01/12] lib/igt_drm_fdinfo: Stop passing key twice Lucas De Marchi
2024-04-18 22:14   ` Umesh Nerlige Ramappa
2024-04-19  7:42   ` Tvrtko Ursulin
2024-04-19 16:35     ` Lucas De Marchi
2024-04-19 18:34       ` Tvrtko Ursulin
2024-04-05  6:00 ` [PATCH i-g-t 02/12] lib/igt_drm_fdinfo: Remove prefix arg from parse functions Lucas De Marchi
2024-04-05  6:00 ` [PATCH i-g-t 03/12] lib/igt_drm_fdinfo: Fix wrong name len assert Lucas De Marchi
2024-04-18 22:25   ` Umesh Nerlige Ramappa
2024-04-19  7:48   ` Tvrtko Ursulin
2024-04-19  7:49     ` Tvrtko Ursulin
2024-04-05  6:00 ` [PATCH i-g-t 04/12] lib/igt_drm_fdinfo: Assert pdev is not truncated Lucas De Marchi
2024-04-18 22:27   ` Umesh Nerlige Ramappa
2024-04-05  6:00 ` [PATCH i-g-t 05/12] lib/igt_drm_fdinfo: Detect invalid drm-client-id Lucas De Marchi
2024-04-18 22:31   ` Umesh Nerlige Ramappa
2024-04-05  6:00 ` [PATCH i-g-t 06/12] lib/igt_drm_fdinfo: Stop ignoring space where not needed Lucas De Marchi
2024-04-18 22:34   ` Umesh Nerlige Ramappa
2024-04-05  6:00 ` [PATCH i-g-t 07/12] lib/igt_drm_fdinfo: Parse unit for engine utilization Lucas De Marchi
2024-04-18 22:48   ` Umesh Nerlige Ramappa
2024-04-19  7:58     ` Tvrtko Ursulin
2024-04-19 16:21       ` Lucas De Marchi
2024-04-19 18:32         ` Tvrtko Ursulin
2024-04-05  6:00 ` [PATCH i-g-t 08/12] lib/igt_drm_fdinfo: Store 2 counters for "ticks" unit Lucas De Marchi
2024-04-05  6:00 ` [PATCH i-g-t 09/12] lib/igt_drm_clients: Store second data for ticks busyness Lucas De Marchi
2024-04-05  6:00 ` [PATCH i-g-t 10/12] gputop: Extract method to update console size Lucas De Marchi
2024-04-18 22:51   ` Umesh Nerlige Ramappa
2024-04-05  6:00 ` [PATCH i-g-t 11/12] gputop: Extract clrscr() Lucas De Marchi
2024-04-18 22:52   ` Umesh Nerlige Ramappa
2024-04-05  6:00 ` [PATCH i-g-t 12/12] RFC: gputop: Add support for ticks unit Lucas De Marchi
2024-04-05  8:04 ` ✗ GitLab.Pipeline: warning for gputop: Add support for xe Patchwork
2024-04-05  8:17 ` ✓ CI.xeBAT: success " Patchwork
2024-04-05  8:27 ` ✓ Fi.CI.BAT: " Patchwork
2024-04-05 16:22 ` ✗ Fi.CI.IGT: 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.