All of lore.kernel.org
 help / color / mirror / Atom feed
* [igt-dev] [PATCH i-g-t v6] lib/igt_sysfs: add asserting helpers for read/write operations
@ 2023-07-11 17:43 Lukasz Laguna
  2023-07-11 17:49 ` Kamil Konieczny
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Lukasz Laguna @ 2023-07-11 17:43 UTC (permalink / raw)
  To: igt-dev; +Cc: chris.p.wilson, kamil.konieczny

Prefix names of existing, non-asserting helpers with "__":

- igt_sysfs_get_u32 -> __igt_sysfs_get_u32
- igt_sysfs_set_u32 -> __igt_sysfs_set_u32
- igt_sysfs_get_u64 -> __igt_sysfs_get_u64
- igt_sysfs_set_u64 -> __igt_sysfs_set_u64
- igt_sysfs_get_boolean -> __igt_sysfs_get_boolean
- igt_sysfs_set_boolean -> __igt_sysfs_set_boolean

Replace all calls to don't introduce any functional changes in the
existing code.

Additionally, reimplement non-asserting get helpers to return boolean
result of the read operation and store the read value via pointer
passed as function parameter. In previous implementation, it wasn't
possible to distinguish if returned zero was a read value or failure on
a read attempt.

On the occasion, fix a typo in modified debug message.

Signed-off-by: Lukasz Laguna <lukasz.laguna@intel.com>
---
 lib/i915/gem_submission.c      |   4 +-
 lib/igt_aux.c                  |   2 +-
 lib/igt_pm.c                   |   2 +-
 lib/igt_sysfs.c                | 220 +++++++++++++++++++++++++--------
 lib/igt_sysfs.h                |  12 +-
 tests/i915/i915_pm_dc.c        |   6 +-
 tests/i915/i915_pm_freq_mult.c |  42 ++++---
 tests/i915/i915_pm_rps.c       |  32 ++---
 tests/i915/i915_power.c        |   9 +-
 tests/i915/perf_pmu.c          |  45 ++++---
 tests/kms_prime.c              |   2 +-
 tests/nouveau_crc.c            |   7 +-
 12 files changed, 260 insertions(+), 123 deletions(-)

diff --git a/lib/i915/gem_submission.c b/lib/i915/gem_submission.c
index adf5eb394..7d1c3970f 100644
--- a/lib/i915/gem_submission.c
+++ b/lib/i915/gem_submission.c
@@ -65,12 +65,14 @@ unsigned gem_submission_method(int fd)
 	const int gen = intel_gen(intel_get_drm_devid(fd));
 	unsigned method = GEM_SUBMISSION_RINGBUF;
 	int dir;
+	uint32_t value = 0;
 
 	dir = igt_params_open(fd);
 	if (dir < 0)
 		return 0;
 
-	if (igt_sysfs_get_u32(dir, "enable_guc") & 1) {
+	__igt_sysfs_get_u32(dir, "enable_guc", &value);
+	if (value & 1) {
 		method = GEM_SUBMISSION_GUC;
 	} else if (gen >= 8) {
 		method = GEM_SUBMISSION_EXECLISTS;
diff --git a/lib/igt_aux.c b/lib/igt_aux.c
index fd5103043..61d314945 100644
--- a/lib/igt_aux.c
+++ b/lib/igt_aux.c
@@ -953,7 +953,7 @@ static void igt_aux_enable_pm_suspend_dbg(int power_dir)
 	if (sysfs_fd > 0) {
 		__console_suspend_saved_state = igt_sysfs_get_boolean(sysfs_fd, "console_suspend");
 
-		if (!igt_sysfs_set_boolean(sysfs_fd, "console_suspend", CONSOLE_SUSPEND_DISABLE))
+		if (!__igt_sysfs_set_boolean(sysfs_fd, "console_suspend", CONSOLE_SUSPEND_DISABLE))
 			igt_warn("Unable to disable console suspend\n");
 
 	} else {
diff --git a/lib/igt_pm.c b/lib/igt_pm.c
index 18c84bf3a..ba591f0f8 100644
--- a/lib/igt_pm.c
+++ b/lib/igt_pm.c
@@ -1415,5 +1415,5 @@ void igt_pm_ignore_slpc_efficient_freq(int i915, int gtfd, bool val)
 		return;
 
 	igt_require(igt_sysfs_has_attr(gtfd, "slpc_ignore_eff_freq"));
-	igt_assert(igt_sysfs_set_u32(gtfd, "slpc_ignore_eff_freq", val));
+	igt_sysfs_set_u32(gtfd, "slpc_ignore_eff_freq", val);
 }
diff --git a/lib/igt_sysfs.c b/lib/igt_sysfs.c
index 412edfc29..83182020b 100644
--- a/lib/igt_sysfs.c
+++ b/lib/igt_sysfs.c
@@ -565,122 +565,236 @@ int igt_sysfs_printf(int dir, const char *attr, const char *fmt, ...)
 	return ret;
 }
 
+/**
+ * __igt_sysfs_get_u32:
+ * @dir: directory corresponding to attribute
+ * @attr: name of the sysfs node to read
+ * @value: pointer for storing read value
+ *
+ * Convenience wrapper to read a unsigned 32bit integer from a sysfs file.
+ *
+ * Returns:
+ * True if value successfully read, false otherwise.
+ */
+bool __igt_sysfs_get_u32(int dir, const char *attr, uint32_t *value)
+{
+	if (igt_debug_on(igt_sysfs_scanf(dir, attr, "%u", value) != 1))
+		return false;
+
+	return true;
+}
+
 /**
  * igt_sysfs_get_u32:
- * @dir: directory for the device from igt_sysfs_open()
- * @attr: name of the sysfs node to open
+ * @dir: directory corresponding to attribute
+ * @attr: name of the sysfs node to read
  *
  * Convenience wrapper to read a unsigned 32bit integer from a sysfs file.
+ * It asserts on failure.
  *
  * Returns:
- * The value read.
+ * Read value.
  */
 uint32_t igt_sysfs_get_u32(int dir, const char *attr)
 {
-	uint32_t result;
+	uint32_t value;
+
+	igt_assert_f(__igt_sysfs_get_u32(dir, attr, &value),
+		     "Failed to read %s attribute (%s)\n", attr, strerror(errno));
+
+	return value;
+}
+
+/**
+ * __igt_sysfs_set_u32:
+ * @dir: directory corresponding to attribute
+ * @attr: name of the sysfs node to write
+ * @value: value to set
+ *
+ * Convenience wrapper to write a unsigned 32bit integer to a sysfs file.
+ *
+ * Returns:
+ * True if successfully written, false otherwise.
+ */
+bool __igt_sysfs_set_u32(int dir, const char *attr, uint32_t value)
+{
+	return igt_sysfs_printf(dir, attr, "%u", value) > 0;
+}
+
+/**
+ * igt_sysfs_set_u32:
+ * @dir: directory corresponding to attribute
+ * @attr: name of the sysfs node to write
+ * @value: value to set
+ *
+ * Convenience wrapper to write a unsigned 32bit integer to a sysfs file.
+ * It asserts on failure.
+ */
+void igt_sysfs_set_u32(int dir, const char *attr, uint32_t value)
+{
+	igt_assert_f(__igt_sysfs_set_u32(dir, attr, value),
+		     "Failed to write %u to %s attribute (%s)\n", value, attr, strerror(errno));
+}
 
-	if (igt_debug_on(igt_sysfs_scanf(dir, attr, "%u", &result) != 1))
-		return 0;
+/**
+ * __igt_sysfs_get_u64:
+ * @dir: directory corresponding to attribute
+ * @attr: name of the sysfs node to read
+ * @value: pointer for storing read value
+ *
+ * Convenience wrapper to read a unsigned 64bit integer from a sysfs file.
+ *
+ * Returns:
+ * True if value successfully read, false otherwise.
+ */
+bool __igt_sysfs_get_u64(int dir, const char *attr, uint64_t *value)
+{
+	if (igt_debug_on(igt_sysfs_scanf(dir, attr, "%"PRIu64, value) != 1))
+		return false;
 
-	return result;
+	return true;
 }
 
 /**
  * igt_sysfs_get_u64:
- * @dir: directory for the device from igt_sysfs_open()
- * @attr: name of the sysfs node to open
+ * @dir: directory corresponding to attribute
+ * @attr: name of the sysfs node to read
  *
  * Convenience wrapper to read a unsigned 64bit integer from a sysfs file.
+ * It asserts on failure.
  *
  * Returns:
- * The value read.
+ * Read value.
  */
 uint64_t igt_sysfs_get_u64(int dir, const char *attr)
 {
-	uint64_t result;
+	uint64_t value;
 
-	if (igt_debug_on(igt_sysfs_scanf(dir, attr, "%"PRIu64, &result) != 1))
-		return 0;
+	igt_assert_f(__igt_sysfs_get_u64(dir, attr, &value),
+		     "Failed to read %s attribute (%s)\n", attr, strerror(errno));
 
-	return result;
+	return value;
 }
 
 /**
- * igt_sysfs_set_u64:
- * @dir: directory for the device from igt_sysfs_open()
- * @attr: name of the sysfs node to open
+ * __igt_sysfs_set_u64:
+ * @dir: directory corresponding to attribute
+ * @attr: name of the sysfs node to write
  * @value: value to set
  *
  * Convenience wrapper to write a unsigned 64bit integer to a sysfs file.
  *
  * Returns:
- * True if successfully written
+ * True if successfully written, false otherwise.
  */
-bool igt_sysfs_set_u64(int dir, const char *attr, uint64_t value)
+bool __igt_sysfs_set_u64(int dir, const char *attr, uint64_t value)
 {
 	return igt_sysfs_printf(dir, attr, "%"PRIu64, value) > 0;
 }
 
 /**
- * igt_sysfs_set_u32:
- * @dir: directory for the device from igt_sysfs_open()
- * @attr: name of the sysfs node to open
+ * igt_sysfs_set_u64:
+ * @dir: directory corresponding to attribute
+ * @attr: name of the sysfs node to write
  * @value: value to set
  *
- * Convenience wrapper to write a unsigned 32bit integer to a sysfs file.
- *
- * Returns:
- * True if successfully written
+ * Convenience wrapper to write a unsigned 64bit integer to a sysfs file.
+ * It asserts on failure.
  */
-bool igt_sysfs_set_u32(int dir, const char *attr, uint32_t value)
+void igt_sysfs_set_u64(int dir, const char *attr, uint64_t value)
 {
-	return igt_sysfs_printf(dir, attr, "%u", value) > 0;
+	igt_assert_f(__igt_sysfs_set_u64(dir, attr, value),
+		     "Failed to write  %"PRIu64" to %s attribute (%s)\n",
+		     value, attr, strerror(errno));
 }
 
 /**
- * igt_sysfs_get_boolean:
- * @dir: directory for the device from igt_sysfs_open()
- * @attr: name of the sysfs node to open
+ * __igt_sysfs_get_boolean:
+ * @dir: directory corresponding to attribute
+ * @attr: name of the sysfs node to read
+ * @value: pointer for storing read value
  *
  * Convenience wrapper to read a boolean sysfs file.
- * 
+ *
  * Returns:
- * The value read.
+ * True if value successfully read, false otherwise.
  */
-bool igt_sysfs_get_boolean(int dir, const char *attr)
+bool __igt_sysfs_get_boolean(int dir, const char *attr, bool *value)
 {
-	int result;
 	char *buf;
+	int ret, read_value;
 
 	buf = igt_sysfs_get(dir, attr);
-	if (igt_debug_on(!buf))
+	if (igt_debug_on_f(!buf, "Failed to read %s attribute (%s)\n", attr, strerror(errno)))
 		return false;
 
-	if (sscanf(buf, "%d", &result) != 1) {
-		/* kernel's param_get_bool() returns "Y"/"N" */
-		result = !strcasecmp(buf, "Y");
+	ret = sscanf(buf, "%d", &read_value);
+	if (((ret == 1) && (read_value == 1)) || ((ret == 0) && !strcasecmp(buf, "Y"))) {
+		*value = true;
+	} else if (((ret == 1) && (read_value == 0)) || ((ret == 0) && !strcasecmp(buf, "N"))) {
+		*value = false;
+	} else {
+		igt_debug("Value read from %s attribute (%s) is not as expected (0|1|N|Y|n|y)\n",
+			  attr, buf);
+		free(buf);
+		return false;
 	}
 
 	free(buf);
-	return result;
+	return true;
 }
 
 /**
- * igt_sysfs_set_boolean:
- * @dir: directory for the device from igt_sysfs_open()
- * @attr: name of the sysfs node to open
+ * igt_sysfs_get_boolean:
+ * @dir: directory corresponding to attribute
+ * @attr: name of the sysfs node to read
+ *
+ * Convenience wrapper to read a boolean sysfs file.
+ * It asserts on failure.
+ *
+ * Returns:
+ * Read value.
+ */
+bool igt_sysfs_get_boolean(int dir, const char *attr)
+{
+	bool value;
+
+	igt_assert(__igt_sysfs_get_boolean(dir, attr, &value));
+
+	return value;
+}
+
+/**
+ * __igt_sysfs_set_boolean:
+ * @dir: directory corresponding to attribute
+ * @attr: name of the sysfs node to write
  * @value: value to set
  *
  * Convenience wrapper to write a boolean sysfs file.
- * 
+ *
  * Returns:
- * The value read.
+ * True if successfully written, false otherwise.
  */
-bool igt_sysfs_set_boolean(int dir, const char *attr, bool value)
+bool __igt_sysfs_set_boolean(int dir, const char *attr, bool value)
 {
 	return igt_sysfs_printf(dir, attr, "%d", value) == 1;
 }
 
+/**
+ * igt_sysfs_set_boolean:
+ * @dir: directory corresponding to attribute
+ * @attr: name of the sysfs node to write
+ * @value: value to set
+ *
+ * Convenience wrapper to write a boolean sysfs file.
+ * It asserts on failure.
+ */
+void igt_sysfs_set_boolean(int dir, const char *attr, bool value)
+{
+	igt_assert_f(__igt_sysfs_set_boolean(dir, attr, value),
+		     "Failed to write %u to %s attribute (%s)\n", value, attr, strerror(errno));
+}
+
 static void bind_con(const char *name, bool enable)
 {
 	const char *path = "/sys/class/vtconsole";
@@ -845,14 +959,14 @@ static bool rw_attr_equal_within_epsilon(uint64_t x, uint64_t ref, double tol)
 /* Sweep the range of values for an attribute to identify matching reads/writes */
 static int rw_attr_sweep(igt_sysfs_rw_attr_t *rw)
 {
-	uint64_t get, set = rw->start;
+	uint64_t get = 0, set = rw->start;
 	int num_points = 0;
 	bool ret;
 
 	igt_debug("'%s': sweeping range of values\n", rw->attr);
 	while (set < UINT64_MAX / 2) {
-		ret = igt_sysfs_set_u64(rw->dir, rw->attr, set);
-		get = igt_sysfs_get_u64(rw->dir, rw->attr);
+		ret = __igt_sysfs_set_u64(rw->dir, rw->attr, set);
+		__igt_sysfs_get_u64(rw->dir, rw->attr, &get);
 		igt_debug("'%s': ret %d set %lu get %lu\n", rw->attr, ret, set, get);
 		if (ret && rw_attr_equal_within_epsilon(get, set, rw->tol)) {
 			igt_debug("'%s': matches\n", rw->attr);
@@ -888,7 +1002,7 @@ static int rw_attr_sweep(igt_sysfs_rw_attr_t *rw)
  */
 void igt_sysfs_rw_attr_verify(igt_sysfs_rw_attr_t *rw)
 {
-	uint64_t prev, get;
+	uint64_t prev = 0, get = 0;
 	struct stat st;
 	int ret;
 
@@ -896,7 +1010,7 @@ void igt_sysfs_rw_attr_verify(igt_sysfs_rw_attr_t *rw)
 	igt_assert(st.st_mode & 0222); /* writable */
 	igt_assert(rw->start);	/* cannot be 0 */
 
-	prev = igt_sysfs_get_u64(rw->dir, rw->attr);
+	__igt_sysfs_get_u64(rw->dir, rw->attr, &prev);
 	igt_debug("'%s': prev %lu\n", rw->attr, prev);
 
 	ret = rw_attr_sweep(rw);
@@ -905,8 +1019,8 @@ void igt_sysfs_rw_attr_verify(igt_sysfs_rw_attr_t *rw)
 	 * Restore previous value: we don't assert before this point so
 	 * that we can restore the attr before asserting
 	 */
-	igt_assert_eq(1, igt_sysfs_set_u64(rw->dir, rw->attr, prev));
-	get = igt_sysfs_get_u64(rw->dir, rw->attr);
+	igt_sysfs_set_u64(rw->dir, rw->attr, prev);
+	__igt_sysfs_get_u64(rw->dir, rw->attr, &get);
 	igt_assert_eq(get, prev);
 	igt_assert(!ret);
 }
diff --git a/lib/igt_sysfs.h b/lib/igt_sysfs.h
index d507fde8b..0087c03b7 100644
--- a/lib/igt_sysfs.h
+++ b/lib/igt_sysfs.h
@@ -119,14 +119,20 @@ int igt_sysfs_vprintf(int dir, const char *attr, const char *fmt, va_list ap)
 int igt_sysfs_printf(int dir, const char *attr, const char *fmt, ...)
 	__attribute__((format(printf,3,4)));
 
+bool __igt_sysfs_get_u32(int dir, const char *attr, uint32_t *value);
 uint32_t igt_sysfs_get_u32(int dir, const char *attr);
-bool igt_sysfs_set_u32(int dir, const char *attr, uint32_t value);
+bool __igt_sysfs_set_u32(int dir, const char *attr, uint32_t value);
+void igt_sysfs_set_u32(int dir, const char *attr, uint32_t value);
 
+bool __igt_sysfs_get_u64(int dir, const char *attr, uint64_t *value);
 uint64_t igt_sysfs_get_u64(int dir, const char *attr);
-bool igt_sysfs_set_u64(int dir, const char *attr, uint64_t value);
+bool __igt_sysfs_set_u64(int dir, const char *attr, uint64_t value);
+void igt_sysfs_set_u64(int dir, const char *attr, uint64_t value);
 
+bool __igt_sysfs_get_boolean(int dir, const char *attr, bool *value);
 bool igt_sysfs_get_boolean(int dir, const char *attr);
-bool igt_sysfs_set_boolean(int dir, const char *attr, bool value);
+bool __igt_sysfs_set_boolean(int dir, const char *attr, bool value);
+void igt_sysfs_set_boolean(int dir, const char *attr, bool value);
 
 void bind_fbcon(bool enable);
 void kick_snd_hda_intel(void);
diff --git a/tests/i915/i915_pm_dc.c b/tests/i915/i915_pm_dc.c
index 5069ddcc3..90fe847fc 100644
--- a/tests/i915/i915_pm_dc.c
+++ b/tests/i915/i915_pm_dc.c
@@ -533,8 +533,8 @@ static void setup_dc9_dpms(data_t *data, int dc_target)
 	int prev_dc = 0, prev_rpm, sysfs_fd;
 
 	igt_require((sysfs_fd = open(KMS_HELPER, O_RDONLY)) >= 0);
-	kms_poll_saved_state = igt_sysfs_get_boolean(sysfs_fd, "poll");
-	igt_sysfs_set_boolean(sysfs_fd, "poll", KMS_POLL_DISABLE);
+	__igt_sysfs_get_boolean(sysfs_fd, "poll", &kms_poll_saved_state);
+	__igt_sysfs_set_boolean(sysfs_fd, "poll", KMS_POLL_DISABLE);
 	close(sysfs_fd);
 	if (DC9_RESETS_DC_COUNTERS(data->devid)) {
 		prev_dc = read_dc_counter(data->debugfs_fd, dc_target);
@@ -629,7 +629,7 @@ static void kms_poll_state_restore(int sig)
 
 	sysfs_fd = open(KMS_HELPER, O_RDONLY);
 	if (sysfs_fd >= 0) {
-		igt_sysfs_set_boolean(sysfs_fd, "poll", kms_poll_saved_state);
+		__igt_sysfs_set_boolean(sysfs_fd, "poll", kms_poll_saved_state);
 		close(sysfs_fd);
 	}
 }
diff --git a/tests/i915/i915_pm_freq_mult.c b/tests/i915/i915_pm_freq_mult.c
index af62bbc2c..49f6722b1 100644
--- a/tests/i915/i915_pm_freq_mult.c
+++ b/tests/i915/i915_pm_freq_mult.c
@@ -50,25 +50,26 @@ static void spin_all(void)
 
 static void restore_rps_defaults(int dir)
 {
-	int def, min, max;
+	int def;
+	uint32_t min = 0, max = 0;
 
 	/* Read from gt/gtN/.defaults/ write to gt/gtN/ */
 	def = openat(dir, ".defaults", O_RDONLY);
 	if (def < 0)
 		return;
 
-	max = igt_sysfs_get_u32(def, "rps_max_freq_mhz");
-	igt_sysfs_set_u32(dir, "rps_max_freq_mhz", max);
+	__igt_sysfs_get_u32(def, "rps_max_freq_mhz", &max);
+	__igt_sysfs_set_u32(dir, "rps_max_freq_mhz", max);
 
-	min = igt_sysfs_get_u32(def, "rps_min_freq_mhz");
-	igt_sysfs_set_u32(dir, "rps_min_freq_mhz", min);
+	__igt_sysfs_get_u32(def, "rps_min_freq_mhz", &min);
+	__igt_sysfs_set_u32(dir, "rps_min_freq_mhz", min);
 
 	close(def);
 }
 
 static void setup_freq(int gt, int dir)
 {
-	int rp0, rp1, rpn, min, max, act, media;
+	uint32_t rp0 = 0, rp1 = 0, rpn = 0, min = 0, max = 0, act = 0, media = 0;
 
 	ctx = intel_ctx_create_all_physical(i915);
 	ahnd = get_reloc_ahnd(i915, ctx->id);
@@ -81,17 +82,18 @@ static void setup_freq(int gt, int dir)
 	wait_freq_set();
 
 	/* Print some debug information */
-	rp0 = igt_sysfs_get_u32(dir, "rps_RP0_freq_mhz");
-	rp1 = igt_sysfs_get_u32(dir, "rps_RP1_freq_mhz");
-	rpn = igt_sysfs_get_u32(dir, "rps_RPn_freq_mhz");
-	min = igt_sysfs_get_u32(dir, "rps_min_freq_mhz");
-	max = igt_sysfs_get_u32(dir, "rps_max_freq_mhz");
-	act = igt_sysfs_get_u32(dir, "rps_act_freq_mhz");
+	rp0 = __igt_sysfs_get_u32(dir, "rps_RP0_freq_mhz", &rp0);
+	rp1 = __igt_sysfs_get_u32(dir, "rps_RP1_freq_mhz", &rp1);
+	rpn = __igt_sysfs_get_u32(dir, "rps_RPn_freq_mhz", &rpn);
+	min = __igt_sysfs_get_u32(dir, "rps_min_freq_mhz", &min);
+	max = __igt_sysfs_get_u32(dir, "rps_max_freq_mhz", &max);
+	act = __igt_sysfs_get_u32(dir, "rps_act_freq_mhz", &act);
 
-	igt_debug("RP0 MHz: %d, RP1 MHz: %d, RPn MHz: %d, min MHz: %d, max MHz: %d, act MHz: %d\n", rp0, rp1, rpn, min, max, act);
+	igt_debug("RP0 MHz: %u, RP1 MHz: %u, RPn MHz: %u, min MHz: %u, max MHz: %u, act MHz: %u\n",
+		  rp0, rp1, rpn, min, max, act);
 
 	if (igt_sysfs_has_attr(dir, "media_freq_factor")) {
-		media = igt_sysfs_get_u32(dir, "media_freq_factor");
+		__igt_sysfs_get_u32(dir, "media_freq_factor", &media);
 		igt_debug("media ratio: %.2f\n", media * FREQ_SCALE_FACTOR);
 	}
 }
@@ -108,6 +110,7 @@ static void cleanup(int dir)
 static void media_freq(int gt, int dir)
 {
 	float scale;
+	uint32_t rp0 = 0, rpn = 0;
 
 	igt_require(igt_sysfs_has_attr(dir, "media_freq_factor"));
 
@@ -116,9 +119,9 @@ static void media_freq(int gt, int dir)
 
 	setup_freq(gt, dir);
 
-	igt_debug("media RP0 mhz: %d, media RPn mhz: %d\n",
-		  igt_sysfs_get_u32(dir, "media_RP0_freq_mhz"),
-		  igt_sysfs_get_u32(dir, "media_RPn_freq_mhz"));
+	__igt_sysfs_get_u32(dir, "media_RP0_freq_mhz", &rp0);
+	__igt_sysfs_get_u32(dir, "media_RPn_freq_mhz", &rpn);
+	igt_debug("media RP0 MHz: %u, media RPn MHz: %u\n", rp0, rpn);
 	igt_debug("media ratio value 0.0 represents dynamic mode\n");
 
 	/*
@@ -127,7 +130,8 @@ static void media_freq(int gt, int dir)
 	 * modes. Fixed ratio modes should return the same value.
 	 */
 	for (int v = 256; v >= 0; v -= 64) {
-		int getv, ret;
+		int ret;
+		uint32_t getv = 0;
 
 		/*
 		 * Check that we can set the mode. Ratios other than 1:2
@@ -141,7 +145,7 @@ static void media_freq(int gt, int dir)
 
 		wait_freq_set();
 
-		getv = igt_sysfs_get_u32(dir, "media_freq_factor");
+		__igt_sysfs_get_u32(dir, "media_freq_factor", &getv);
 
 		igt_debug("media ratio set: %.2f, media ratio get: %.2f\n",
 			  v * scale, getv * scale);
diff --git a/tests/i915/i915_pm_rps.c b/tests/i915/i915_pm_rps.c
index 7044fcd81..d9d43e568 100644
--- a/tests/i915/i915_pm_rps.c
+++ b/tests/i915/i915_pm_rps.c
@@ -720,7 +720,7 @@ static void fence_order(int i915)
 		.buffer_count = ARRAY_SIZE(obj),
 	};
 	uint64_t wr, rw;
-	int min, max;
+	uint32_t min = 0, max = 0;
 	double freq;
 	int sysfs;
 
@@ -742,14 +742,14 @@ static void fence_order(int i915)
 	 */
 
 	sysfs = igt_sysfs_open(i915);
-	min = igt_sysfs_get_u32(sysfs, "gt_RPn_freq_mhz");
-	max = igt_sysfs_get_u32(sysfs, "gt_RP0_freq_mhz");
+	__igt_sysfs_get_u32(sysfs, "gt_RPn_freq_mhz", &min);
+	__igt_sysfs_get_u32(sysfs, "gt_RP0_freq_mhz", &max);
 	igt_require(max > min);
 
 	/* Only allow ourselves to upclock via waitboosting */
-	igt_sysfs_printf(sysfs, "gt_min_freq_mhz", "%d", min);
-	igt_sysfs_printf(sysfs, "gt_max_freq_mhz", "%d", min);
-	igt_sysfs_printf(sysfs, "gt_boost_freq_mhz", "%d", max);
+	igt_sysfs_printf(sysfs, "gt_min_freq_mhz", "%u", min);
+	igt_sysfs_printf(sysfs, "gt_max_freq_mhz", "%u", min);
+	igt_sysfs_printf(sysfs, "gt_boost_freq_mhz", "%u", max);
 
 	/* Warm up to bind the vma */
 	__fence_order(i915, &obj[0], &execbuf, 0, 0, &freq);
@@ -763,8 +763,8 @@ static void fence_order(int i915)
 	gem_close(i915, obj[0].handle);
 	gem_close(i915, obj[1].handle);
 
-	igt_sysfs_printf(sysfs, "gt_min_freq_mhz", "%d", min);
-	igt_sysfs_printf(sysfs, "gt_max_freq_mhz", "%d", max);
+	igt_sysfs_printf(sysfs, "gt_min_freq_mhz", "%u", min);
+	igt_sysfs_printf(sysfs, "gt_max_freq_mhz", "%u", max);
 
 	close(sysfs);
 
@@ -830,7 +830,7 @@ static void engine_order(int i915)
 	uint64_t forward, backward, both;
 	unsigned int num_engines;
 	const intel_ctx_t *ctx;
-	int min, max;
+	uint32_t min = 0, max = 0;
 	double freq;
 	int sysfs;
 
@@ -862,14 +862,14 @@ static void engine_order(int i915)
 	execbuf.rsvd1 = ctx->id;
 
 	sysfs = igt_sysfs_open(i915);
-	min = igt_sysfs_get_u32(sysfs, "gt_RPn_freq_mhz");
-	max = igt_sysfs_get_u32(sysfs, "gt_RP0_freq_mhz");
+	__igt_sysfs_get_u32(sysfs, "gt_RPn_freq_mhz", &min);
+	__igt_sysfs_get_u32(sysfs, "gt_RP0_freq_mhz", &max);
 	igt_require(max > min);
 
 	/* Only allow ourselves to upclock via waitboosting */
-	igt_sysfs_printf(sysfs, "gt_min_freq_mhz", "%d", min);
-	igt_sysfs_printf(sysfs, "gt_max_freq_mhz", "%d", min);
-	igt_sysfs_printf(sysfs, "gt_boost_freq_mhz", "%d", max);
+	igt_sysfs_printf(sysfs, "gt_min_freq_mhz", "%u", min);
+	igt_sysfs_printf(sysfs, "gt_max_freq_mhz", "%u", min);
+	igt_sysfs_printf(sysfs, "gt_boost_freq_mhz", "%u", max);
 
 	/* Warm up to bind the vma */
 	gem_execbuf(i915, &execbuf);
@@ -893,8 +893,8 @@ static void engine_order(int i915)
 	gem_close(i915, obj[1].handle);
 	intel_ctx_destroy(i915, ctx);
 
-	igt_sysfs_printf(sysfs, "gt_min_freq_mhz", "%d", min);
-	igt_sysfs_printf(sysfs, "gt_max_freq_mhz", "%d", max);
+	igt_sysfs_printf(sysfs, "gt_min_freq_mhz", "%u", min);
+	igt_sysfs_printf(sysfs, "gt_max_freq_mhz", "%u", max);
 
 	close(sysfs);
 
diff --git a/tests/i915/i915_power.c b/tests/i915/i915_power.c
index ed7bef495..ee00cbcd8 100644
--- a/tests/i915/i915_power.c
+++ b/tests/i915/i915_power.c
@@ -38,7 +38,8 @@ static void sanity(int i915)
 	double idle, busy;
 	igt_spin_t *spin;
 	uint64_t ahnd;
-	int dir, gt, req, act;
+	int dir, gt;
+	uint32_t req = 0, act = 0;
 
 #define DURATION_SEC 2
 
@@ -58,9 +59,9 @@ static void sanity(int i915)
 	igt_spin_busywait_until_started(spin);
 	busy = measure_power(&pwr, DURATION_SEC);
 	i915_for_each_gt(i915, dir, gt) {
-		req = igt_sysfs_get_u32(dir, "rps_cur_freq_mhz");
-		act = igt_sysfs_get_u32(dir, "rps_act_freq_mhz");
-		igt_info("gt %d: req MHz: %d, act MHz: %d\n", gt, req, act);
+		__igt_sysfs_get_u32(dir, "rps_cur_freq_mhz", &req);
+		__igt_sysfs_get_u32(dir, "rps_act_freq_mhz", &act);
+		igt_info("gt %d: req MHz: %u, act MHz: %u\n", gt, req, act);
 	}
 	igt_free_spins(i915);
 	put_ahnd(ahnd);
diff --git a/tests/i915/perf_pmu.c b/tests/i915/perf_pmu.c
index 0806a8e54..441ec6f57 100644
--- a/tests/i915/perf_pmu.c
+++ b/tests/i915/perf_pmu.c
@@ -1782,7 +1782,7 @@ static igt_spin_t *spin_sync_gt(int i915, uint64_t ahnd, unsigned int gt,
 static void
 test_frequency(int gem_fd, unsigned int gt)
 {
-	uint32_t min_freq, max_freq, boost_freq;
+	uint32_t min_freq = 0, max_freq = 0, boost_freq = 0, read_value = 0;
 	uint64_t val[2], start[2], slept;
 	double min[2], max[2];
 	igt_spin_t *spin;
@@ -1793,9 +1793,9 @@ test_frequency(int gem_fd, unsigned int gt)
 	sysfs = igt_sysfs_gt_open(gem_fd, gt);
 	igt_require(sysfs >= 0);
 
-	min_freq = igt_sysfs_get_u32(sysfs, "rps_RPn_freq_mhz");
-	max_freq = igt_sysfs_get_u32(sysfs, "rps_RP0_freq_mhz");
-	boost_freq = igt_sysfs_get_u32(sysfs, "rps_boost_freq_mhz");
+	__igt_sysfs_get_u32(sysfs, "rps_RPn_freq_mhz", &min_freq);
+	__igt_sysfs_get_u32(sysfs, "rps_RP0_freq_mhz", &max_freq);
+	__igt_sysfs_get_u32(sysfs, "rps_boost_freq_mhz", &boost_freq);
 	igt_info("Frequency: min=%u, max=%u, boost=%u MHz\n",
 		 min_freq, max_freq, boost_freq);
 	igt_require(min_freq > 0 && max_freq > 0 && boost_freq > 0);
@@ -1808,12 +1808,15 @@ test_frequency(int gem_fd, unsigned int gt)
 	/*
 	 * Set GPU to min frequency and read PMU counters.
 	 */
-	igt_require(igt_sysfs_set_u32(sysfs, "rps_min_freq_mhz", min_freq));
-	igt_require(igt_sysfs_get_u32(sysfs, "rps_min_freq_mhz") == min_freq);
-	igt_require(igt_sysfs_set_u32(sysfs, "rps_max_freq_mhz", min_freq));
-	igt_require(igt_sysfs_get_u32(sysfs, "rps_max_freq_mhz") == min_freq);
-	igt_require(igt_sysfs_set_u32(sysfs, "rps_boost_freq_mhz", min_freq));
-	igt_require(igt_sysfs_get_u32(sysfs, "rps_boost_freq_mhz") == min_freq);
+	igt_require(__igt_sysfs_set_u32(sysfs, "rps_min_freq_mhz", min_freq));
+	igt_require(__igt_sysfs_get_u32(sysfs, "rps_min_freq_mhz", &read_value));
+	igt_require(read_value == min_freq);
+	igt_require(__igt_sysfs_set_u32(sysfs, "rps_max_freq_mhz", min_freq));
+	igt_require(__igt_sysfs_get_u32(sysfs, "rps_max_freq_mhz", &read_value));
+	igt_require(read_value == min_freq);
+	igt_require(__igt_sysfs_set_u32(sysfs, "rps_boost_freq_mhz", min_freq));
+	igt_require(__igt_sysfs_get_u32(sysfs, "rps_boost_freq_mhz", &read_value));
+	igt_require(read_value == min_freq);
 
 	gem_quiescent_gpu(gem_fd); /* Idle to be sure the change takes effect */
 	spin = spin_sync_gt(gem_fd, ahnd, gt, &ctx);
@@ -1834,13 +1837,16 @@ test_frequency(int gem_fd, unsigned int gt)
 	/*
 	 * Set GPU to max frequency and read PMU counters.
 	 */
-	igt_require(igt_sysfs_set_u32(sysfs, "rps_max_freq_mhz", max_freq));
-	igt_require(igt_sysfs_get_u32(sysfs, "rps_max_freq_mhz") == max_freq);
-	igt_require(igt_sysfs_set_u32(sysfs, "rps_boost_freq_mhz", boost_freq));
-	igt_require(igt_sysfs_get_u32(sysfs, "rps_boost_freq_mhz") == boost_freq);
+	igt_require(__igt_sysfs_set_u32(sysfs, "rps_max_freq_mhz", max_freq));
+	igt_require(__igt_sysfs_get_u32(sysfs, "rps_max_freq_mhz", &read_value));
+	igt_require(read_value == max_freq);
+	igt_require(__igt_sysfs_set_u32(sysfs, "rps_boost_freq_mhz", boost_freq));
+	igt_require(__igt_sysfs_get_u32(sysfs, "rps_boost_freq_mhz", &read_value));
+	igt_require(read_value == boost_freq);
 
-	igt_require(igt_sysfs_set_u32(sysfs, "rps_min_freq_mhz", max_freq));
-	igt_require(igt_sysfs_get_u32(sysfs, "rps_min_freq_mhz") == max_freq);
+	igt_require(__igt_sysfs_set_u32(sysfs, "rps_min_freq_mhz", max_freq));
+	igt_require(__igt_sysfs_get_u32(sysfs, "rps_min_freq_mhz", &read_value));
+	igt_require(read_value == max_freq);
 
 	gem_quiescent_gpu(gem_fd);
 	spin = spin_sync_gt(gem_fd, ahnd, gt, &ctx);
@@ -1859,10 +1865,11 @@ test_frequency(int gem_fd, unsigned int gt)
 	/*
 	 * Restore min/max.
 	 */
-	igt_sysfs_set_u32(sysfs, "rps_min_freq_mhz", min_freq);
-	if (igt_sysfs_get_u32(sysfs, "rps_min_freq_mhz") != min_freq)
+	__igt_sysfs_set_u32(sysfs, "rps_min_freq_mhz", min_freq);
+	__igt_sysfs_get_u32(sysfs, "rps_min_freq_mhz", &read_value);
+	if (read_value != min_freq)
 		igt_warn("Unable to restore min frequency to saved value [%u MHz], now %u MHz\n",
-			 min_freq, igt_sysfs_get_u32(sysfs, "rps_min_freq_mhz"));
+			 min_freq, read_value);
 	close(fd[0]);
 	close(fd[1]);
 	put_ahnd(ahnd);
diff --git a/tests/kms_prime.c b/tests/kms_prime.c
index 52f587961..dedbf6233 100644
--- a/tests/kms_prime.c
+++ b/tests/kms_prime.c
@@ -341,7 +341,7 @@ static void kms_poll_state_restore(void)
 	int sysfs_fd;
 
 	igt_assert((sysfs_fd = open(KMS_HELPER, O_RDONLY)) >= 0);
-	igt_sysfs_set_boolean(sysfs_fd, "poll", kms_poll_saved_state);
+	__igt_sysfs_set_boolean(sysfs_fd, "poll", kms_poll_saved_state);
 	close(sysfs_fd);
 
 }
diff --git a/tests/nouveau_crc.c b/tests/nouveau_crc.c
index d5aa0e650..c94972318 100644
--- a/tests/nouveau_crc.c
+++ b/tests/nouveau_crc.c
@@ -264,15 +264,18 @@ static void test_ctx_flip_threshold_reset_after_capture(data_t *data)
 {
 	igt_pipe_crc_t *pipe_crc;
 	const int fd = data->drm_fd;
+	uint32_t value = 0;
 
 	pipe_crc = igt_pipe_crc_new(fd, data->pipe, IGT_PIPE_CRC_SOURCE_AUTO);
 
 	set_crc_flip_threshold(data, 5);
 	igt_pipe_crc_start(pipe_crc);
-	igt_assert_eq(igt_sysfs_get_u32(data->nv_crc_dir, "flip_threshold"), 5);
+	__igt_sysfs_get_u32(data->nv_crc_dir, "flip_threshold", &value);
+	igt_assert_eq(value, 5);
 	igt_pipe_crc_stop(pipe_crc);
 
-	igt_assert_neq(igt_sysfs_get_u32(data->nv_crc_dir, "flip_threshold"), 5);
+	__igt_sysfs_get_u32(data->nv_crc_dir, "flip_threshold", &value);
+	igt_assert_neq(value, 5);
 	igt_pipe_crc_free(pipe_crc);
 }
 
-- 
2.40.0

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

* Re: [igt-dev] [PATCH i-g-t v6] lib/igt_sysfs: add asserting helpers for read/write operations
  2023-07-11 17:43 [igt-dev] [PATCH i-g-t v6] lib/igt_sysfs: add asserting helpers for read/write operations Lukasz Laguna
@ 2023-07-11 17:49 ` Kamil Konieczny
  2023-07-11 18:30 ` [igt-dev] ✗ Fi.CI.BAT: failure for lib/igt_sysfs: add asserting helpers for read/write operations (rev7) Patchwork
  2023-07-11 18:41 ` [igt-dev] ○ CI.xeBAT: info " Patchwork
  2 siblings, 0 replies; 4+ messages in thread
From: Kamil Konieczny @ 2023-07-11 17:49 UTC (permalink / raw)
  To: igt-dev; +Cc: chris.p.wilson

Hi Lukasz,
On 2023-07-11 at 19:43:19 +0200, Lukasz Laguna wrote:
> Prefix names of existing, non-asserting helpers with "__":
> 
> - igt_sysfs_get_u32 -> __igt_sysfs_get_u32
> - igt_sysfs_set_u32 -> __igt_sysfs_set_u32
> - igt_sysfs_get_u64 -> __igt_sysfs_get_u64
> - igt_sysfs_set_u64 -> __igt_sysfs_set_u64
> - igt_sysfs_get_boolean -> __igt_sysfs_get_boolean
> - igt_sysfs_set_boolean -> __igt_sysfs_set_boolean
> 
> Replace all calls to don't introduce any functional changes in the
> existing code.
> 
> Additionally, reimplement non-asserting get helpers to return boolean
> result of the read operation and store the read value via pointer
> passed as function parameter. In previous implementation, it wasn't
> possible to distinguish if returned zero was a read value or failure on
> a read attempt.
> 
> On the occasion, fix a typo in modified debug message.
> 
> Signed-off-by: Lukasz Laguna <lukasz.laguna@intel.com>

Reviewed-by: Kamil Konieczny <kamil.konieczny@linux.intel.com>

> ---
>  lib/i915/gem_submission.c      |   4 +-
>  lib/igt_aux.c                  |   2 +-
>  lib/igt_pm.c                   |   2 +-
>  lib/igt_sysfs.c                | 220 +++++++++++++++++++++++++--------
>  lib/igt_sysfs.h                |  12 +-
>  tests/i915/i915_pm_dc.c        |   6 +-
>  tests/i915/i915_pm_freq_mult.c |  42 ++++---
>  tests/i915/i915_pm_rps.c       |  32 ++---
>  tests/i915/i915_power.c        |   9 +-
>  tests/i915/perf_pmu.c          |  45 ++++---
>  tests/kms_prime.c              |   2 +-
>  tests/nouveau_crc.c            |   7 +-
>  12 files changed, 260 insertions(+), 123 deletions(-)
> 
> diff --git a/lib/i915/gem_submission.c b/lib/i915/gem_submission.c
> index adf5eb394..7d1c3970f 100644
> --- a/lib/i915/gem_submission.c
> +++ b/lib/i915/gem_submission.c
> @@ -65,12 +65,14 @@ unsigned gem_submission_method(int fd)
>  	const int gen = intel_gen(intel_get_drm_devid(fd));
>  	unsigned method = GEM_SUBMISSION_RINGBUF;
>  	int dir;
> +	uint32_t value = 0;
>  
>  	dir = igt_params_open(fd);
>  	if (dir < 0)
>  		return 0;
>  
> -	if (igt_sysfs_get_u32(dir, "enable_guc") & 1) {
> +	__igt_sysfs_get_u32(dir, "enable_guc", &value);
> +	if (value & 1) {
>  		method = GEM_SUBMISSION_GUC;
>  	} else if (gen >= 8) {
>  		method = GEM_SUBMISSION_EXECLISTS;
> diff --git a/lib/igt_aux.c b/lib/igt_aux.c
> index fd5103043..61d314945 100644
> --- a/lib/igt_aux.c
> +++ b/lib/igt_aux.c
> @@ -953,7 +953,7 @@ static void igt_aux_enable_pm_suspend_dbg(int power_dir)
>  	if (sysfs_fd > 0) {
>  		__console_suspend_saved_state = igt_sysfs_get_boolean(sysfs_fd, "console_suspend");
>  
> -		if (!igt_sysfs_set_boolean(sysfs_fd, "console_suspend", CONSOLE_SUSPEND_DISABLE))
> +		if (!__igt_sysfs_set_boolean(sysfs_fd, "console_suspend", CONSOLE_SUSPEND_DISABLE))
>  			igt_warn("Unable to disable console suspend\n");
>  
>  	} else {
> diff --git a/lib/igt_pm.c b/lib/igt_pm.c
> index 18c84bf3a..ba591f0f8 100644
> --- a/lib/igt_pm.c
> +++ b/lib/igt_pm.c
> @@ -1415,5 +1415,5 @@ void igt_pm_ignore_slpc_efficient_freq(int i915, int gtfd, bool val)
>  		return;
>  
>  	igt_require(igt_sysfs_has_attr(gtfd, "slpc_ignore_eff_freq"));
> -	igt_assert(igt_sysfs_set_u32(gtfd, "slpc_ignore_eff_freq", val));
> +	igt_sysfs_set_u32(gtfd, "slpc_ignore_eff_freq", val);
>  }
> diff --git a/lib/igt_sysfs.c b/lib/igt_sysfs.c
> index 412edfc29..83182020b 100644
> --- a/lib/igt_sysfs.c
> +++ b/lib/igt_sysfs.c
> @@ -565,122 +565,236 @@ int igt_sysfs_printf(int dir, const char *attr, const char *fmt, ...)
>  	return ret;
>  }
>  
> +/**
> + * __igt_sysfs_get_u32:
> + * @dir: directory corresponding to attribute
> + * @attr: name of the sysfs node to read
> + * @value: pointer for storing read value
> + *
> + * Convenience wrapper to read a unsigned 32bit integer from a sysfs file.
> + *
> + * Returns:
> + * True if value successfully read, false otherwise.
> + */
> +bool __igt_sysfs_get_u32(int dir, const char *attr, uint32_t *value)
> +{
> +	if (igt_debug_on(igt_sysfs_scanf(dir, attr, "%u", value) != 1))
> +		return false;
> +
> +	return true;
> +}
> +
>  /**
>   * igt_sysfs_get_u32:
> - * @dir: directory for the device from igt_sysfs_open()
> - * @attr: name of the sysfs node to open
> + * @dir: directory corresponding to attribute
> + * @attr: name of the sysfs node to read
>   *
>   * Convenience wrapper to read a unsigned 32bit integer from a sysfs file.
> + * It asserts on failure.
>   *
>   * Returns:
> - * The value read.
> + * Read value.
>   */
>  uint32_t igt_sysfs_get_u32(int dir, const char *attr)
>  {
> -	uint32_t result;
> +	uint32_t value;
> +
> +	igt_assert_f(__igt_sysfs_get_u32(dir, attr, &value),
> +		     "Failed to read %s attribute (%s)\n", attr, strerror(errno));
> +
> +	return value;
> +}
> +
> +/**
> + * __igt_sysfs_set_u32:
> + * @dir: directory corresponding to attribute
> + * @attr: name of the sysfs node to write
> + * @value: value to set
> + *
> + * Convenience wrapper to write a unsigned 32bit integer to a sysfs file.
> + *
> + * Returns:
> + * True if successfully written, false otherwise.
> + */
> +bool __igt_sysfs_set_u32(int dir, const char *attr, uint32_t value)
> +{
> +	return igt_sysfs_printf(dir, attr, "%u", value) > 0;
> +}
> +
> +/**
> + * igt_sysfs_set_u32:
> + * @dir: directory corresponding to attribute
> + * @attr: name of the sysfs node to write
> + * @value: value to set
> + *
> + * Convenience wrapper to write a unsigned 32bit integer to a sysfs file.
> + * It asserts on failure.
> + */
> +void igt_sysfs_set_u32(int dir, const char *attr, uint32_t value)
> +{
> +	igt_assert_f(__igt_sysfs_set_u32(dir, attr, value),
> +		     "Failed to write %u to %s attribute (%s)\n", value, attr, strerror(errno));
> +}
>  
> -	if (igt_debug_on(igt_sysfs_scanf(dir, attr, "%u", &result) != 1))
> -		return 0;
> +/**
> + * __igt_sysfs_get_u64:
> + * @dir: directory corresponding to attribute
> + * @attr: name of the sysfs node to read
> + * @value: pointer for storing read value
> + *
> + * Convenience wrapper to read a unsigned 64bit integer from a sysfs file.
> + *
> + * Returns:
> + * True if value successfully read, false otherwise.
> + */
> +bool __igt_sysfs_get_u64(int dir, const char *attr, uint64_t *value)
> +{
> +	if (igt_debug_on(igt_sysfs_scanf(dir, attr, "%"PRIu64, value) != 1))
> +		return false;
>  
> -	return result;
> +	return true;
>  }
>  
>  /**
>   * igt_sysfs_get_u64:
> - * @dir: directory for the device from igt_sysfs_open()
> - * @attr: name of the sysfs node to open
> + * @dir: directory corresponding to attribute
> + * @attr: name of the sysfs node to read
>   *
>   * Convenience wrapper to read a unsigned 64bit integer from a sysfs file.
> + * It asserts on failure.
>   *
>   * Returns:
> - * The value read.
> + * Read value.
>   */
>  uint64_t igt_sysfs_get_u64(int dir, const char *attr)
>  {
> -	uint64_t result;
> +	uint64_t value;
>  
> -	if (igt_debug_on(igt_sysfs_scanf(dir, attr, "%"PRIu64, &result) != 1))
> -		return 0;
> +	igt_assert_f(__igt_sysfs_get_u64(dir, attr, &value),
> +		     "Failed to read %s attribute (%s)\n", attr, strerror(errno));
>  
> -	return result;
> +	return value;
>  }
>  
>  /**
> - * igt_sysfs_set_u64:
> - * @dir: directory for the device from igt_sysfs_open()
> - * @attr: name of the sysfs node to open
> + * __igt_sysfs_set_u64:
> + * @dir: directory corresponding to attribute
> + * @attr: name of the sysfs node to write
>   * @value: value to set
>   *
>   * Convenience wrapper to write a unsigned 64bit integer to a sysfs file.
>   *
>   * Returns:
> - * True if successfully written
> + * True if successfully written, false otherwise.
>   */
> -bool igt_sysfs_set_u64(int dir, const char *attr, uint64_t value)
> +bool __igt_sysfs_set_u64(int dir, const char *attr, uint64_t value)
>  {
>  	return igt_sysfs_printf(dir, attr, "%"PRIu64, value) > 0;
>  }
>  
>  /**
> - * igt_sysfs_set_u32:
> - * @dir: directory for the device from igt_sysfs_open()
> - * @attr: name of the sysfs node to open
> + * igt_sysfs_set_u64:
> + * @dir: directory corresponding to attribute
> + * @attr: name of the sysfs node to write
>   * @value: value to set
>   *
> - * Convenience wrapper to write a unsigned 32bit integer to a sysfs file.
> - *
> - * Returns:
> - * True if successfully written
> + * Convenience wrapper to write a unsigned 64bit integer to a sysfs file.
> + * It asserts on failure.
>   */
> -bool igt_sysfs_set_u32(int dir, const char *attr, uint32_t value)
> +void igt_sysfs_set_u64(int dir, const char *attr, uint64_t value)
>  {
> -	return igt_sysfs_printf(dir, attr, "%u", value) > 0;
> +	igt_assert_f(__igt_sysfs_set_u64(dir, attr, value),
> +		     "Failed to write  %"PRIu64" to %s attribute (%s)\n",
> +		     value, attr, strerror(errno));
>  }
>  
>  /**
> - * igt_sysfs_get_boolean:
> - * @dir: directory for the device from igt_sysfs_open()
> - * @attr: name of the sysfs node to open
> + * __igt_sysfs_get_boolean:
> + * @dir: directory corresponding to attribute
> + * @attr: name of the sysfs node to read
> + * @value: pointer for storing read value
>   *
>   * Convenience wrapper to read a boolean sysfs file.
> - * 
> + *
>   * Returns:
> - * The value read.
> + * True if value successfully read, false otherwise.
>   */
> -bool igt_sysfs_get_boolean(int dir, const char *attr)
> +bool __igt_sysfs_get_boolean(int dir, const char *attr, bool *value)
>  {
> -	int result;
>  	char *buf;
> +	int ret, read_value;
>  
>  	buf = igt_sysfs_get(dir, attr);
> -	if (igt_debug_on(!buf))
> +	if (igt_debug_on_f(!buf, "Failed to read %s attribute (%s)\n", attr, strerror(errno)))
>  		return false;
>  
> -	if (sscanf(buf, "%d", &result) != 1) {
> -		/* kernel's param_get_bool() returns "Y"/"N" */
> -		result = !strcasecmp(buf, "Y");
> +	ret = sscanf(buf, "%d", &read_value);
> +	if (((ret == 1) && (read_value == 1)) || ((ret == 0) && !strcasecmp(buf, "Y"))) {
> +		*value = true;
> +	} else if (((ret == 1) && (read_value == 0)) || ((ret == 0) && !strcasecmp(buf, "N"))) {
> +		*value = false;
> +	} else {
> +		igt_debug("Value read from %s attribute (%s) is not as expected (0|1|N|Y|n|y)\n",
> +			  attr, buf);
> +		free(buf);
> +		return false;
>  	}
>  
>  	free(buf);
> -	return result;
> +	return true;
>  }
>  
>  /**
> - * igt_sysfs_set_boolean:
> - * @dir: directory for the device from igt_sysfs_open()
> - * @attr: name of the sysfs node to open
> + * igt_sysfs_get_boolean:
> + * @dir: directory corresponding to attribute
> + * @attr: name of the sysfs node to read
> + *
> + * Convenience wrapper to read a boolean sysfs file.
> + * It asserts on failure.
> + *
> + * Returns:
> + * Read value.
> + */
> +bool igt_sysfs_get_boolean(int dir, const char *attr)
> +{
> +	bool value;
> +
> +	igt_assert(__igt_sysfs_get_boolean(dir, attr, &value));
> +
> +	return value;
> +}
> +
> +/**
> + * __igt_sysfs_set_boolean:
> + * @dir: directory corresponding to attribute
> + * @attr: name of the sysfs node to write
>   * @value: value to set
>   *
>   * Convenience wrapper to write a boolean sysfs file.
> - * 
> + *
>   * Returns:
> - * The value read.
> + * True if successfully written, false otherwise.
>   */
> -bool igt_sysfs_set_boolean(int dir, const char *attr, bool value)
> +bool __igt_sysfs_set_boolean(int dir, const char *attr, bool value)
>  {
>  	return igt_sysfs_printf(dir, attr, "%d", value) == 1;
>  }
>  
> +/**
> + * igt_sysfs_set_boolean:
> + * @dir: directory corresponding to attribute
> + * @attr: name of the sysfs node to write
> + * @value: value to set
> + *
> + * Convenience wrapper to write a boolean sysfs file.
> + * It asserts on failure.
> + */
> +void igt_sysfs_set_boolean(int dir, const char *attr, bool value)
> +{
> +	igt_assert_f(__igt_sysfs_set_boolean(dir, attr, value),
> +		     "Failed to write %u to %s attribute (%s)\n", value, attr, strerror(errno));
> +}
> +
>  static void bind_con(const char *name, bool enable)
>  {
>  	const char *path = "/sys/class/vtconsole";
> @@ -845,14 +959,14 @@ static bool rw_attr_equal_within_epsilon(uint64_t x, uint64_t ref, double tol)
>  /* Sweep the range of values for an attribute to identify matching reads/writes */
>  static int rw_attr_sweep(igt_sysfs_rw_attr_t *rw)
>  {
> -	uint64_t get, set = rw->start;
> +	uint64_t get = 0, set = rw->start;
>  	int num_points = 0;
>  	bool ret;
>  
>  	igt_debug("'%s': sweeping range of values\n", rw->attr);
>  	while (set < UINT64_MAX / 2) {
> -		ret = igt_sysfs_set_u64(rw->dir, rw->attr, set);
> -		get = igt_sysfs_get_u64(rw->dir, rw->attr);
> +		ret = __igt_sysfs_set_u64(rw->dir, rw->attr, set);
> +		__igt_sysfs_get_u64(rw->dir, rw->attr, &get);
>  		igt_debug("'%s': ret %d set %lu get %lu\n", rw->attr, ret, set, get);
>  		if (ret && rw_attr_equal_within_epsilon(get, set, rw->tol)) {
>  			igt_debug("'%s': matches\n", rw->attr);
> @@ -888,7 +1002,7 @@ static int rw_attr_sweep(igt_sysfs_rw_attr_t *rw)
>   */
>  void igt_sysfs_rw_attr_verify(igt_sysfs_rw_attr_t *rw)
>  {
> -	uint64_t prev, get;
> +	uint64_t prev = 0, get = 0;
>  	struct stat st;
>  	int ret;
>  
> @@ -896,7 +1010,7 @@ void igt_sysfs_rw_attr_verify(igt_sysfs_rw_attr_t *rw)
>  	igt_assert(st.st_mode & 0222); /* writable */
>  	igt_assert(rw->start);	/* cannot be 0 */
>  
> -	prev = igt_sysfs_get_u64(rw->dir, rw->attr);
> +	__igt_sysfs_get_u64(rw->dir, rw->attr, &prev);
>  	igt_debug("'%s': prev %lu\n", rw->attr, prev);
>  
>  	ret = rw_attr_sweep(rw);
> @@ -905,8 +1019,8 @@ void igt_sysfs_rw_attr_verify(igt_sysfs_rw_attr_t *rw)
>  	 * Restore previous value: we don't assert before this point so
>  	 * that we can restore the attr before asserting
>  	 */
> -	igt_assert_eq(1, igt_sysfs_set_u64(rw->dir, rw->attr, prev));
> -	get = igt_sysfs_get_u64(rw->dir, rw->attr);
> +	igt_sysfs_set_u64(rw->dir, rw->attr, prev);
> +	__igt_sysfs_get_u64(rw->dir, rw->attr, &get);
>  	igt_assert_eq(get, prev);
>  	igt_assert(!ret);
>  }
> diff --git a/lib/igt_sysfs.h b/lib/igt_sysfs.h
> index d507fde8b..0087c03b7 100644
> --- a/lib/igt_sysfs.h
> +++ b/lib/igt_sysfs.h
> @@ -119,14 +119,20 @@ int igt_sysfs_vprintf(int dir, const char *attr, const char *fmt, va_list ap)
>  int igt_sysfs_printf(int dir, const char *attr, const char *fmt, ...)
>  	__attribute__((format(printf,3,4)));
>  
> +bool __igt_sysfs_get_u32(int dir, const char *attr, uint32_t *value);
>  uint32_t igt_sysfs_get_u32(int dir, const char *attr);
> -bool igt_sysfs_set_u32(int dir, const char *attr, uint32_t value);
> +bool __igt_sysfs_set_u32(int dir, const char *attr, uint32_t value);
> +void igt_sysfs_set_u32(int dir, const char *attr, uint32_t value);
>  
> +bool __igt_sysfs_get_u64(int dir, const char *attr, uint64_t *value);
>  uint64_t igt_sysfs_get_u64(int dir, const char *attr);
> -bool igt_sysfs_set_u64(int dir, const char *attr, uint64_t value);
> +bool __igt_sysfs_set_u64(int dir, const char *attr, uint64_t value);
> +void igt_sysfs_set_u64(int dir, const char *attr, uint64_t value);
>  
> +bool __igt_sysfs_get_boolean(int dir, const char *attr, bool *value);
>  bool igt_sysfs_get_boolean(int dir, const char *attr);
> -bool igt_sysfs_set_boolean(int dir, const char *attr, bool value);
> +bool __igt_sysfs_set_boolean(int dir, const char *attr, bool value);
> +void igt_sysfs_set_boolean(int dir, const char *attr, bool value);
>  
>  void bind_fbcon(bool enable);
>  void kick_snd_hda_intel(void);
> diff --git a/tests/i915/i915_pm_dc.c b/tests/i915/i915_pm_dc.c
> index 5069ddcc3..90fe847fc 100644
> --- a/tests/i915/i915_pm_dc.c
> +++ b/tests/i915/i915_pm_dc.c
> @@ -533,8 +533,8 @@ static void setup_dc9_dpms(data_t *data, int dc_target)
>  	int prev_dc = 0, prev_rpm, sysfs_fd;
>  
>  	igt_require((sysfs_fd = open(KMS_HELPER, O_RDONLY)) >= 0);
> -	kms_poll_saved_state = igt_sysfs_get_boolean(sysfs_fd, "poll");
> -	igt_sysfs_set_boolean(sysfs_fd, "poll", KMS_POLL_DISABLE);
> +	__igt_sysfs_get_boolean(sysfs_fd, "poll", &kms_poll_saved_state);
> +	__igt_sysfs_set_boolean(sysfs_fd, "poll", KMS_POLL_DISABLE);
>  	close(sysfs_fd);
>  	if (DC9_RESETS_DC_COUNTERS(data->devid)) {
>  		prev_dc = read_dc_counter(data->debugfs_fd, dc_target);
> @@ -629,7 +629,7 @@ static void kms_poll_state_restore(int sig)
>  
>  	sysfs_fd = open(KMS_HELPER, O_RDONLY);
>  	if (sysfs_fd >= 0) {
> -		igt_sysfs_set_boolean(sysfs_fd, "poll", kms_poll_saved_state);
> +		__igt_sysfs_set_boolean(sysfs_fd, "poll", kms_poll_saved_state);
>  		close(sysfs_fd);
>  	}
>  }
> diff --git a/tests/i915/i915_pm_freq_mult.c b/tests/i915/i915_pm_freq_mult.c
> index af62bbc2c..49f6722b1 100644
> --- a/tests/i915/i915_pm_freq_mult.c
> +++ b/tests/i915/i915_pm_freq_mult.c
> @@ -50,25 +50,26 @@ static void spin_all(void)
>  
>  static void restore_rps_defaults(int dir)
>  {
> -	int def, min, max;
> +	int def;
> +	uint32_t min = 0, max = 0;
>  
>  	/* Read from gt/gtN/.defaults/ write to gt/gtN/ */
>  	def = openat(dir, ".defaults", O_RDONLY);
>  	if (def < 0)
>  		return;
>  
> -	max = igt_sysfs_get_u32(def, "rps_max_freq_mhz");
> -	igt_sysfs_set_u32(dir, "rps_max_freq_mhz", max);
> +	__igt_sysfs_get_u32(def, "rps_max_freq_mhz", &max);
> +	__igt_sysfs_set_u32(dir, "rps_max_freq_mhz", max);
>  
> -	min = igt_sysfs_get_u32(def, "rps_min_freq_mhz");
> -	igt_sysfs_set_u32(dir, "rps_min_freq_mhz", min);
> +	__igt_sysfs_get_u32(def, "rps_min_freq_mhz", &min);
> +	__igt_sysfs_set_u32(dir, "rps_min_freq_mhz", min);
>  
>  	close(def);
>  }
>  
>  static void setup_freq(int gt, int dir)
>  {
> -	int rp0, rp1, rpn, min, max, act, media;
> +	uint32_t rp0 = 0, rp1 = 0, rpn = 0, min = 0, max = 0, act = 0, media = 0;
>  
>  	ctx = intel_ctx_create_all_physical(i915);
>  	ahnd = get_reloc_ahnd(i915, ctx->id);
> @@ -81,17 +82,18 @@ static void setup_freq(int gt, int dir)
>  	wait_freq_set();
>  
>  	/* Print some debug information */
> -	rp0 = igt_sysfs_get_u32(dir, "rps_RP0_freq_mhz");
> -	rp1 = igt_sysfs_get_u32(dir, "rps_RP1_freq_mhz");
> -	rpn = igt_sysfs_get_u32(dir, "rps_RPn_freq_mhz");
> -	min = igt_sysfs_get_u32(dir, "rps_min_freq_mhz");
> -	max = igt_sysfs_get_u32(dir, "rps_max_freq_mhz");
> -	act = igt_sysfs_get_u32(dir, "rps_act_freq_mhz");
> +	rp0 = __igt_sysfs_get_u32(dir, "rps_RP0_freq_mhz", &rp0);
> +	rp1 = __igt_sysfs_get_u32(dir, "rps_RP1_freq_mhz", &rp1);
> +	rpn = __igt_sysfs_get_u32(dir, "rps_RPn_freq_mhz", &rpn);
> +	min = __igt_sysfs_get_u32(dir, "rps_min_freq_mhz", &min);
> +	max = __igt_sysfs_get_u32(dir, "rps_max_freq_mhz", &max);
> +	act = __igt_sysfs_get_u32(dir, "rps_act_freq_mhz", &act);
>  
> -	igt_debug("RP0 MHz: %d, RP1 MHz: %d, RPn MHz: %d, min MHz: %d, max MHz: %d, act MHz: %d\n", rp0, rp1, rpn, min, max, act);
> +	igt_debug("RP0 MHz: %u, RP1 MHz: %u, RPn MHz: %u, min MHz: %u, max MHz: %u, act MHz: %u\n",
> +		  rp0, rp1, rpn, min, max, act);
>  
>  	if (igt_sysfs_has_attr(dir, "media_freq_factor")) {
> -		media = igt_sysfs_get_u32(dir, "media_freq_factor");
> +		__igt_sysfs_get_u32(dir, "media_freq_factor", &media);
>  		igt_debug("media ratio: %.2f\n", media * FREQ_SCALE_FACTOR);
>  	}
>  }
> @@ -108,6 +110,7 @@ static void cleanup(int dir)
>  static void media_freq(int gt, int dir)
>  {
>  	float scale;
> +	uint32_t rp0 = 0, rpn = 0;
>  
>  	igt_require(igt_sysfs_has_attr(dir, "media_freq_factor"));
>  
> @@ -116,9 +119,9 @@ static void media_freq(int gt, int dir)
>  
>  	setup_freq(gt, dir);
>  
> -	igt_debug("media RP0 mhz: %d, media RPn mhz: %d\n",
> -		  igt_sysfs_get_u32(dir, "media_RP0_freq_mhz"),
> -		  igt_sysfs_get_u32(dir, "media_RPn_freq_mhz"));
> +	__igt_sysfs_get_u32(dir, "media_RP0_freq_mhz", &rp0);
> +	__igt_sysfs_get_u32(dir, "media_RPn_freq_mhz", &rpn);
> +	igt_debug("media RP0 MHz: %u, media RPn MHz: %u\n", rp0, rpn);
>  	igt_debug("media ratio value 0.0 represents dynamic mode\n");
>  
>  	/*
> @@ -127,7 +130,8 @@ static void media_freq(int gt, int dir)
>  	 * modes. Fixed ratio modes should return the same value.
>  	 */
>  	for (int v = 256; v >= 0; v -= 64) {
> -		int getv, ret;
> +		int ret;
> +		uint32_t getv = 0;
>  
>  		/*
>  		 * Check that we can set the mode. Ratios other than 1:2
> @@ -141,7 +145,7 @@ static void media_freq(int gt, int dir)
>  
>  		wait_freq_set();
>  
> -		getv = igt_sysfs_get_u32(dir, "media_freq_factor");
> +		__igt_sysfs_get_u32(dir, "media_freq_factor", &getv);
>  
>  		igt_debug("media ratio set: %.2f, media ratio get: %.2f\n",
>  			  v * scale, getv * scale);
> diff --git a/tests/i915/i915_pm_rps.c b/tests/i915/i915_pm_rps.c
> index 7044fcd81..d9d43e568 100644
> --- a/tests/i915/i915_pm_rps.c
> +++ b/tests/i915/i915_pm_rps.c
> @@ -720,7 +720,7 @@ static void fence_order(int i915)
>  		.buffer_count = ARRAY_SIZE(obj),
>  	};
>  	uint64_t wr, rw;
> -	int min, max;
> +	uint32_t min = 0, max = 0;
>  	double freq;
>  	int sysfs;
>  
> @@ -742,14 +742,14 @@ static void fence_order(int i915)
>  	 */
>  
>  	sysfs = igt_sysfs_open(i915);
> -	min = igt_sysfs_get_u32(sysfs, "gt_RPn_freq_mhz");
> -	max = igt_sysfs_get_u32(sysfs, "gt_RP0_freq_mhz");
> +	__igt_sysfs_get_u32(sysfs, "gt_RPn_freq_mhz", &min);
> +	__igt_sysfs_get_u32(sysfs, "gt_RP0_freq_mhz", &max);
>  	igt_require(max > min);
>  
>  	/* Only allow ourselves to upclock via waitboosting */
> -	igt_sysfs_printf(sysfs, "gt_min_freq_mhz", "%d", min);
> -	igt_sysfs_printf(sysfs, "gt_max_freq_mhz", "%d", min);
> -	igt_sysfs_printf(sysfs, "gt_boost_freq_mhz", "%d", max);
> +	igt_sysfs_printf(sysfs, "gt_min_freq_mhz", "%u", min);
> +	igt_sysfs_printf(sysfs, "gt_max_freq_mhz", "%u", min);
> +	igt_sysfs_printf(sysfs, "gt_boost_freq_mhz", "%u", max);
>  
>  	/* Warm up to bind the vma */
>  	__fence_order(i915, &obj[0], &execbuf, 0, 0, &freq);
> @@ -763,8 +763,8 @@ static void fence_order(int i915)
>  	gem_close(i915, obj[0].handle);
>  	gem_close(i915, obj[1].handle);
>  
> -	igt_sysfs_printf(sysfs, "gt_min_freq_mhz", "%d", min);
> -	igt_sysfs_printf(sysfs, "gt_max_freq_mhz", "%d", max);
> +	igt_sysfs_printf(sysfs, "gt_min_freq_mhz", "%u", min);
> +	igt_sysfs_printf(sysfs, "gt_max_freq_mhz", "%u", max);
>  
>  	close(sysfs);
>  
> @@ -830,7 +830,7 @@ static void engine_order(int i915)
>  	uint64_t forward, backward, both;
>  	unsigned int num_engines;
>  	const intel_ctx_t *ctx;
> -	int min, max;
> +	uint32_t min = 0, max = 0;
>  	double freq;
>  	int sysfs;
>  
> @@ -862,14 +862,14 @@ static void engine_order(int i915)
>  	execbuf.rsvd1 = ctx->id;
>  
>  	sysfs = igt_sysfs_open(i915);
> -	min = igt_sysfs_get_u32(sysfs, "gt_RPn_freq_mhz");
> -	max = igt_sysfs_get_u32(sysfs, "gt_RP0_freq_mhz");
> +	__igt_sysfs_get_u32(sysfs, "gt_RPn_freq_mhz", &min);
> +	__igt_sysfs_get_u32(sysfs, "gt_RP0_freq_mhz", &max);
>  	igt_require(max > min);
>  
>  	/* Only allow ourselves to upclock via waitboosting */
> -	igt_sysfs_printf(sysfs, "gt_min_freq_mhz", "%d", min);
> -	igt_sysfs_printf(sysfs, "gt_max_freq_mhz", "%d", min);
> -	igt_sysfs_printf(sysfs, "gt_boost_freq_mhz", "%d", max);
> +	igt_sysfs_printf(sysfs, "gt_min_freq_mhz", "%u", min);
> +	igt_sysfs_printf(sysfs, "gt_max_freq_mhz", "%u", min);
> +	igt_sysfs_printf(sysfs, "gt_boost_freq_mhz", "%u", max);
>  
>  	/* Warm up to bind the vma */
>  	gem_execbuf(i915, &execbuf);
> @@ -893,8 +893,8 @@ static void engine_order(int i915)
>  	gem_close(i915, obj[1].handle);
>  	intel_ctx_destroy(i915, ctx);
>  
> -	igt_sysfs_printf(sysfs, "gt_min_freq_mhz", "%d", min);
> -	igt_sysfs_printf(sysfs, "gt_max_freq_mhz", "%d", max);
> +	igt_sysfs_printf(sysfs, "gt_min_freq_mhz", "%u", min);
> +	igt_sysfs_printf(sysfs, "gt_max_freq_mhz", "%u", max);
>  
>  	close(sysfs);
>  
> diff --git a/tests/i915/i915_power.c b/tests/i915/i915_power.c
> index ed7bef495..ee00cbcd8 100644
> --- a/tests/i915/i915_power.c
> +++ b/tests/i915/i915_power.c
> @@ -38,7 +38,8 @@ static void sanity(int i915)
>  	double idle, busy;
>  	igt_spin_t *spin;
>  	uint64_t ahnd;
> -	int dir, gt, req, act;
> +	int dir, gt;
> +	uint32_t req = 0, act = 0;
>  
>  #define DURATION_SEC 2
>  
> @@ -58,9 +59,9 @@ static void sanity(int i915)
>  	igt_spin_busywait_until_started(spin);
>  	busy = measure_power(&pwr, DURATION_SEC);
>  	i915_for_each_gt(i915, dir, gt) {
> -		req = igt_sysfs_get_u32(dir, "rps_cur_freq_mhz");
> -		act = igt_sysfs_get_u32(dir, "rps_act_freq_mhz");
> -		igt_info("gt %d: req MHz: %d, act MHz: %d\n", gt, req, act);
> +		__igt_sysfs_get_u32(dir, "rps_cur_freq_mhz", &req);
> +		__igt_sysfs_get_u32(dir, "rps_act_freq_mhz", &act);
> +		igt_info("gt %d: req MHz: %u, act MHz: %u\n", gt, req, act);
>  	}
>  	igt_free_spins(i915);
>  	put_ahnd(ahnd);
> diff --git a/tests/i915/perf_pmu.c b/tests/i915/perf_pmu.c
> index 0806a8e54..441ec6f57 100644
> --- a/tests/i915/perf_pmu.c
> +++ b/tests/i915/perf_pmu.c
> @@ -1782,7 +1782,7 @@ static igt_spin_t *spin_sync_gt(int i915, uint64_t ahnd, unsigned int gt,
>  static void
>  test_frequency(int gem_fd, unsigned int gt)
>  {
> -	uint32_t min_freq, max_freq, boost_freq;
> +	uint32_t min_freq = 0, max_freq = 0, boost_freq = 0, read_value = 0;
>  	uint64_t val[2], start[2], slept;
>  	double min[2], max[2];
>  	igt_spin_t *spin;
> @@ -1793,9 +1793,9 @@ test_frequency(int gem_fd, unsigned int gt)
>  	sysfs = igt_sysfs_gt_open(gem_fd, gt);
>  	igt_require(sysfs >= 0);
>  
> -	min_freq = igt_sysfs_get_u32(sysfs, "rps_RPn_freq_mhz");
> -	max_freq = igt_sysfs_get_u32(sysfs, "rps_RP0_freq_mhz");
> -	boost_freq = igt_sysfs_get_u32(sysfs, "rps_boost_freq_mhz");
> +	__igt_sysfs_get_u32(sysfs, "rps_RPn_freq_mhz", &min_freq);
> +	__igt_sysfs_get_u32(sysfs, "rps_RP0_freq_mhz", &max_freq);
> +	__igt_sysfs_get_u32(sysfs, "rps_boost_freq_mhz", &boost_freq);
>  	igt_info("Frequency: min=%u, max=%u, boost=%u MHz\n",
>  		 min_freq, max_freq, boost_freq);
>  	igt_require(min_freq > 0 && max_freq > 0 && boost_freq > 0);
> @@ -1808,12 +1808,15 @@ test_frequency(int gem_fd, unsigned int gt)
>  	/*
>  	 * Set GPU to min frequency and read PMU counters.
>  	 */
> -	igt_require(igt_sysfs_set_u32(sysfs, "rps_min_freq_mhz", min_freq));
> -	igt_require(igt_sysfs_get_u32(sysfs, "rps_min_freq_mhz") == min_freq);
> -	igt_require(igt_sysfs_set_u32(sysfs, "rps_max_freq_mhz", min_freq));
> -	igt_require(igt_sysfs_get_u32(sysfs, "rps_max_freq_mhz") == min_freq);
> -	igt_require(igt_sysfs_set_u32(sysfs, "rps_boost_freq_mhz", min_freq));
> -	igt_require(igt_sysfs_get_u32(sysfs, "rps_boost_freq_mhz") == min_freq);
> +	igt_require(__igt_sysfs_set_u32(sysfs, "rps_min_freq_mhz", min_freq));
> +	igt_require(__igt_sysfs_get_u32(sysfs, "rps_min_freq_mhz", &read_value));
> +	igt_require(read_value == min_freq);
> +	igt_require(__igt_sysfs_set_u32(sysfs, "rps_max_freq_mhz", min_freq));
> +	igt_require(__igt_sysfs_get_u32(sysfs, "rps_max_freq_mhz", &read_value));
> +	igt_require(read_value == min_freq);
> +	igt_require(__igt_sysfs_set_u32(sysfs, "rps_boost_freq_mhz", min_freq));
> +	igt_require(__igt_sysfs_get_u32(sysfs, "rps_boost_freq_mhz", &read_value));
> +	igt_require(read_value == min_freq);
>  
>  	gem_quiescent_gpu(gem_fd); /* Idle to be sure the change takes effect */
>  	spin = spin_sync_gt(gem_fd, ahnd, gt, &ctx);
> @@ -1834,13 +1837,16 @@ test_frequency(int gem_fd, unsigned int gt)
>  	/*
>  	 * Set GPU to max frequency and read PMU counters.
>  	 */
> -	igt_require(igt_sysfs_set_u32(sysfs, "rps_max_freq_mhz", max_freq));
> -	igt_require(igt_sysfs_get_u32(sysfs, "rps_max_freq_mhz") == max_freq);
> -	igt_require(igt_sysfs_set_u32(sysfs, "rps_boost_freq_mhz", boost_freq));
> -	igt_require(igt_sysfs_get_u32(sysfs, "rps_boost_freq_mhz") == boost_freq);
> +	igt_require(__igt_sysfs_set_u32(sysfs, "rps_max_freq_mhz", max_freq));
> +	igt_require(__igt_sysfs_get_u32(sysfs, "rps_max_freq_mhz", &read_value));
> +	igt_require(read_value == max_freq);
> +	igt_require(__igt_sysfs_set_u32(sysfs, "rps_boost_freq_mhz", boost_freq));
> +	igt_require(__igt_sysfs_get_u32(sysfs, "rps_boost_freq_mhz", &read_value));
> +	igt_require(read_value == boost_freq);
>  
> -	igt_require(igt_sysfs_set_u32(sysfs, "rps_min_freq_mhz", max_freq));
> -	igt_require(igt_sysfs_get_u32(sysfs, "rps_min_freq_mhz") == max_freq);
> +	igt_require(__igt_sysfs_set_u32(sysfs, "rps_min_freq_mhz", max_freq));
> +	igt_require(__igt_sysfs_get_u32(sysfs, "rps_min_freq_mhz", &read_value));
> +	igt_require(read_value == max_freq);
>  
>  	gem_quiescent_gpu(gem_fd);
>  	spin = spin_sync_gt(gem_fd, ahnd, gt, &ctx);
> @@ -1859,10 +1865,11 @@ test_frequency(int gem_fd, unsigned int gt)
>  	/*
>  	 * Restore min/max.
>  	 */
> -	igt_sysfs_set_u32(sysfs, "rps_min_freq_mhz", min_freq);
> -	if (igt_sysfs_get_u32(sysfs, "rps_min_freq_mhz") != min_freq)
> +	__igt_sysfs_set_u32(sysfs, "rps_min_freq_mhz", min_freq);
> +	__igt_sysfs_get_u32(sysfs, "rps_min_freq_mhz", &read_value);
> +	if (read_value != min_freq)
>  		igt_warn("Unable to restore min frequency to saved value [%u MHz], now %u MHz\n",
> -			 min_freq, igt_sysfs_get_u32(sysfs, "rps_min_freq_mhz"));
> +			 min_freq, read_value);
>  	close(fd[0]);
>  	close(fd[1]);
>  	put_ahnd(ahnd);
> diff --git a/tests/kms_prime.c b/tests/kms_prime.c
> index 52f587961..dedbf6233 100644
> --- a/tests/kms_prime.c
> +++ b/tests/kms_prime.c
> @@ -341,7 +341,7 @@ static void kms_poll_state_restore(void)
>  	int sysfs_fd;
>  
>  	igt_assert((sysfs_fd = open(KMS_HELPER, O_RDONLY)) >= 0);
> -	igt_sysfs_set_boolean(sysfs_fd, "poll", kms_poll_saved_state);
> +	__igt_sysfs_set_boolean(sysfs_fd, "poll", kms_poll_saved_state);
>  	close(sysfs_fd);
>  
>  }
> diff --git a/tests/nouveau_crc.c b/tests/nouveau_crc.c
> index d5aa0e650..c94972318 100644
> --- a/tests/nouveau_crc.c
> +++ b/tests/nouveau_crc.c
> @@ -264,15 +264,18 @@ static void test_ctx_flip_threshold_reset_after_capture(data_t *data)
>  {
>  	igt_pipe_crc_t *pipe_crc;
>  	const int fd = data->drm_fd;
> +	uint32_t value = 0;
>  
>  	pipe_crc = igt_pipe_crc_new(fd, data->pipe, IGT_PIPE_CRC_SOURCE_AUTO);
>  
>  	set_crc_flip_threshold(data, 5);
>  	igt_pipe_crc_start(pipe_crc);
> -	igt_assert_eq(igt_sysfs_get_u32(data->nv_crc_dir, "flip_threshold"), 5);
> +	__igt_sysfs_get_u32(data->nv_crc_dir, "flip_threshold", &value);
> +	igt_assert_eq(value, 5);
>  	igt_pipe_crc_stop(pipe_crc);
>  
> -	igt_assert_neq(igt_sysfs_get_u32(data->nv_crc_dir, "flip_threshold"), 5);
> +	__igt_sysfs_get_u32(data->nv_crc_dir, "flip_threshold", &value);
> +	igt_assert_neq(value, 5);
>  	igt_pipe_crc_free(pipe_crc);
>  }
>  
> -- 
> 2.40.0
> 

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

* [igt-dev] ✗ Fi.CI.BAT: failure for lib/igt_sysfs: add asserting helpers for read/write operations (rev7)
  2023-07-11 17:43 [igt-dev] [PATCH i-g-t v6] lib/igt_sysfs: add asserting helpers for read/write operations Lukasz Laguna
  2023-07-11 17:49 ` Kamil Konieczny
@ 2023-07-11 18:30 ` Patchwork
  2023-07-11 18:41 ` [igt-dev] ○ CI.xeBAT: info " Patchwork
  2 siblings, 0 replies; 4+ messages in thread
From: Patchwork @ 2023-07-11 18:30 UTC (permalink / raw)
  To: Lukasz Laguna; +Cc: igt-dev

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

== Series Details ==

Series: lib/igt_sysfs: add asserting helpers for read/write operations (rev7)
URL   : https://patchwork.freedesktop.org/series/119507/
State : failure

== Summary ==

CI Bug Log - changes from CI_DRM_13372 -> IGTPW_9388
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with IGTPW_9388 absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in IGTPW_9388, please notify your bug team 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_9388/index.html

Participating hosts (41 -> 40)
------------------------------

  Additional (1): fi-kbl-soraka 
  Missing    (2): bat-atsm-1 fi-snb-2520m 

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

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

### IGT changes ###

#### Possible regressions ####

  * igt@gem_exec_suspend@basic-s0@smem:
    - fi-skl-6600u:       [PASS][1] -> [FAIL][2] +6 similar issues
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/fi-skl-6600u/igt@gem_exec_suspend@basic-s0@smem.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/fi-skl-6600u/igt@gem_exec_suspend@basic-s0@smem.html

  * igt@gem_exec_suspend@basic-s3@smem:
    - fi-glk-j4005:       [PASS][3] -> [FAIL][4] +6 similar issues
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/fi-glk-j4005/igt@gem_exec_suspend@basic-s3@smem.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/fi-glk-j4005/igt@gem_exec_suspend@basic-s3@smem.html
    - bat-jsl-1:          [PASS][5] -> [FAIL][6] +6 similar issues
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/bat-jsl-1/igt@gem_exec_suspend@basic-s3@smem.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/bat-jsl-1/igt@gem_exec_suspend@basic-s3@smem.html

  * igt@i915_suspend@basic-s2idle-without-i915:
    - fi-tgl-1115g4:      [PASS][7] -> [FAIL][8]
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/fi-tgl-1115g4/igt@i915_suspend@basic-s2idle-without-i915.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/fi-tgl-1115g4/igt@i915_suspend@basic-s2idle-without-i915.html
    - fi-bsw-nick:        [PASS][9] -> [FAIL][10] +3 similar issues
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/fi-bsw-nick/igt@i915_suspend@basic-s2idle-without-i915.html
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/fi-bsw-nick/igt@i915_suspend@basic-s2idle-without-i915.html
    - bat-adlm-1:         [PASS][11] -> [FAIL][12] +3 similar issues
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/bat-adlm-1/igt@i915_suspend@basic-s2idle-without-i915.html
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/bat-adlm-1/igt@i915_suspend@basic-s2idle-without-i915.html
    - bat-rpls-1:         NOTRUN -> [FAIL][13] +2 similar issues
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/bat-rpls-1/igt@i915_suspend@basic-s2idle-without-i915.html
    - fi-pnv-d510:        [PASS][14] -> [FAIL][15]
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/fi-pnv-d510/igt@i915_suspend@basic-s2idle-without-i915.html
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/fi-pnv-d510/igt@i915_suspend@basic-s2idle-without-i915.html

  * igt@i915_suspend@basic-s3-without-i915:
    - fi-rkl-11600:       [PASS][16] -> [FAIL][17] +5 similar issues
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/fi-rkl-11600/igt@i915_suspend@basic-s3-without-i915.html
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/fi-rkl-11600/igt@i915_suspend@basic-s3-without-i915.html

  * igt@kms_pipe_crc_basic@suspend-read-crc@pipe-a-edp-1:
    - bat-jsl-3:          [PASS][18] -> [FAIL][19] +6 similar issues
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/bat-jsl-3/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-a-edp-1.html
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/bat-jsl-3/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-a-edp-1.html

  * igt@kms_pipe_crc_basic@suspend-read-crc@pipe-a-vga-1:
    - fi-ilk-650:         [PASS][20] -> [FAIL][21] +5 similar issues
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/fi-ilk-650/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-a-vga-1.html
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/fi-ilk-650/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-a-vga-1.html

  * igt@kms_pipe_crc_basic@suspend-read-crc@pipe-b-dp-2:
    - fi-skl-guc:         [PASS][22] -> [FAIL][23] +6 similar issues
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/fi-skl-guc/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-b-dp-2.html
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/fi-skl-guc/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-b-dp-2.html

  * igt@kms_pipe_crc_basic@suspend-read-crc@pipe-b-vga-1:
    - fi-blb-e6850:       [PASS][24] -> [FAIL][25] +5 similar issues
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/fi-blb-e6850/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-b-vga-1.html
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/fi-blb-e6850/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-b-vga-1.html
    - fi-pnv-d510:        NOTRUN -> [FAIL][26] +3 similar issues
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/fi-pnv-d510/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-b-vga-1.html

  * igt@kms_pipe_crc_basic@suspend-read-crc@pipe-c-hdmi-a-2:
    - fi-bsw-n3050:       [PASS][27] -> [FAIL][28] +4 similar issues
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/fi-bsw-n3050/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-c-hdmi-a-2.html
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/fi-bsw-n3050/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-c-hdmi-a-2.html

  * igt@kms_pipe_crc_basic@suspend-read-crc@pipe-c-vga-1:
    - fi-hsw-4770:        NOTRUN -> [FAIL][29] +4 similar issues
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/fi-hsw-4770/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-c-vga-1.html

  * igt@kms_pipe_crc_basic@suspend-read-crc@pipe-d-hdmi-a-1:
    - fi-tgl-1115g4:      NOTRUN -> [FAIL][30] +4 similar issues
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/fi-tgl-1115g4/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-d-hdmi-a-1.html

  
#### Warnings ####

  * igt@i915_suspend@basic-s2idle-without-i915:
    - fi-hsw-4770:        [DMESG-WARN][31] ([i915#8841]) -> [FAIL][32]
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/fi-hsw-4770/igt@i915_suspend@basic-s2idle-without-i915.html
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/fi-hsw-4770/igt@i915_suspend@basic-s2idle-without-i915.html

  * igt@i915_suspend@basic-s3-without-i915:
    - fi-pnv-d510:        [ABORT][33] ([i915#8844]) -> [FAIL][34]
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/fi-pnv-d510/igt@i915_suspend@basic-s3-without-i915.html
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/fi-pnv-d510/igt@i915_suspend@basic-s3-without-i915.html
    - fi-tgl-1115g4:      [INCOMPLETE][35] ([i915#7443] / [i915#8102]) -> [FAIL][36]
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/fi-tgl-1115g4/igt@i915_suspend@basic-s3-without-i915.html
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/fi-tgl-1115g4/igt@i915_suspend@basic-s3-without-i915.html
    - fi-hsw-4770:        [ABORT][37] ([i915#8844]) -> [FAIL][38]
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/fi-hsw-4770/igt@i915_suspend@basic-s3-without-i915.html
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/fi-hsw-4770/igt@i915_suspend@basic-s3-without-i915.html

  * igt@kms_pipe_crc_basic@suspend-read-crc@pipe-c-vga-1:
    - fi-ivb-3770:        [DMESG-WARN][39] ([i915#8841]) -> [FAIL][40] +6 similar issues
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/fi-ivb-3770/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-c-vga-1.html
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/fi-ivb-3770/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-c-vga-1.html

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

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

### IGT changes ###

#### Issues hit ####

  * igt@gem_exec_suspend@basic-s0@lmem0:
    - bat-dg2-11:         [PASS][41] -> [FAIL][42] ([i915#6121] / [i915#8011]) +1 similar issue
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/bat-dg2-11/igt@gem_exec_suspend@basic-s0@lmem0.html
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/bat-dg2-11/igt@gem_exec_suspend@basic-s0@lmem0.html
    - bat-dg2-8:          [PASS][43] -> [FAIL][44] ([i915#6121] / [i915#8011]) +1 similar issue
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/bat-dg2-8/igt@gem_exec_suspend@basic-s0@lmem0.html
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/bat-dg2-8/igt@gem_exec_suspend@basic-s0@lmem0.html

  * igt@gem_exec_suspend@basic-s0@smem:
    - fi-rkl-11600:       [PASS][45] -> [FAIL][46] ([i915#8011])
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/fi-rkl-11600/igt@gem_exec_suspend@basic-s0@smem.html
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/fi-rkl-11600/igt@gem_exec_suspend@basic-s0@smem.html
    - bat-adls-5:         [PASS][47] -> [FAIL][48] ([i915#6121]) +2 similar issues
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/bat-adls-5/igt@gem_exec_suspend@basic-s0@smem.html
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/bat-adls-5/igt@gem_exec_suspend@basic-s0@smem.html
    - bat-dg1-5:          [PASS][49] -> [FAIL][50] ([i915#6121] / [i915#8011]) +1 similar issue
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/bat-dg1-5/igt@gem_exec_suspend@basic-s0@smem.html
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/bat-dg1-5/igt@gem_exec_suspend@basic-s0@smem.html
    - bat-dg1-7:          [PASS][51] -> [FAIL][52] ([i915#6121] / [i915#8011]) +1 similar issue
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/bat-dg1-7/igt@gem_exec_suspend@basic-s0@smem.html
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/bat-dg1-7/igt@gem_exec_suspend@basic-s0@smem.html
    - bat-dg2-9:          [PASS][53] -> [FAIL][54] ([i915#6121] / [i915#8011]) +1 similar issue
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/bat-dg2-9/igt@gem_exec_suspend@basic-s0@smem.html
   [54]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/bat-dg2-9/igt@gem_exec_suspend@basic-s0@smem.html
    - fi-kbl-x1275:       [PASS][55] -> [FAIL][56] ([i915#6121]) +2 similar issues
   [55]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/fi-kbl-x1275/igt@gem_exec_suspend@basic-s0@smem.html
   [56]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/fi-kbl-x1275/igt@gem_exec_suspend@basic-s0@smem.html
    - fi-tgl-1115g4:      NOTRUN -> [FAIL][57] ([i915#8011])
   [57]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/fi-tgl-1115g4/igt@gem_exec_suspend@basic-s0@smem.html
    - fi-kbl-guc:         [PASS][58] -> [FAIL][59] ([i915#6121]) +3 similar issues
   [58]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/fi-kbl-guc/igt@gem_exec_suspend@basic-s0@smem.html
   [59]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/fi-kbl-guc/igt@gem_exec_suspend@basic-s0@smem.html
    - bat-rpls-1:         NOTRUN -> [FAIL][60] ([i915#8011])
   [60]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/bat-rpls-1/igt@gem_exec_suspend@basic-s0@smem.html
    - bat-adlp-9:         [PASS][61] -> [FAIL][62] ([i915#6121] / [i915#8011])
   [61]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/bat-adlp-9/igt@gem_exec_suspend@basic-s0@smem.html
   [62]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/bat-adlp-9/igt@gem_exec_suspend@basic-s0@smem.html

  * igt@gem_exec_suspend@basic-s3@lmem0:
    - bat-dg2-9:          [PASS][63] -> [FAIL][64] ([i915#6121]) +3 similar issues
   [63]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/bat-dg2-9/igt@gem_exec_suspend@basic-s3@lmem0.html
   [64]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/bat-dg2-9/igt@gem_exec_suspend@basic-s3@lmem0.html

  * igt@gem_exec_suspend@basic-s3@smem:
    - bat-mtlp-8:         [PASS][65] -> [FAIL][66] ([i915#6121]) +6 similar issues
   [65]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/bat-mtlp-8/igt@gem_exec_suspend@basic-s3@smem.html
   [66]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/bat-mtlp-8/igt@gem_exec_suspend@basic-s3@smem.html
    - bat-adlp-9:         [PASS][67] -> [FAIL][68] ([i915#6121]) +5 similar issues
   [67]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/bat-adlp-9/igt@gem_exec_suspend@basic-s3@smem.html
   [68]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/bat-adlp-9/igt@gem_exec_suspend@basic-s3@smem.html

  * igt@gem_huc_copy@huc-copy:
    - fi-kbl-soraka:      NOTRUN -> [SKIP][69] ([fdo#109271] / [i915#2190])
   [69]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/fi-kbl-soraka/igt@gem_huc_copy@huc-copy.html

  * igt@gem_lmem_swapping@basic:
    - fi-kbl-soraka:      NOTRUN -> [SKIP][70] ([fdo#109271] / [i915#4613]) +3 similar issues
   [70]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/fi-kbl-soraka/igt@gem_lmem_swapping@basic.html

  * igt@i915_pm_rpm@basic-rte:
    - fi-cfl-8109u:       [PASS][71] -> [FAIL][72] ([i915#7940])
   [71]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/fi-cfl-8109u/igt@i915_pm_rpm@basic-rte.html
   [72]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/fi-cfl-8109u/igt@i915_pm_rpm@basic-rte.html

  * igt@i915_selftest@live@gt_pm:
    - fi-kbl-soraka:      NOTRUN -> [DMESG-FAIL][73] ([i915#1886] / [i915#7913])
   [73]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/fi-kbl-soraka/igt@i915_selftest@live@gt_pm.html

  * igt@i915_selftest@live@reset:
    - bat-rpls-2:         [PASS][74] -> [ABORT][75] ([i915#4983] / [i915#7461] / [i915#7913] / [i915#8347])
   [74]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/bat-rpls-2/igt@i915_selftest@live@reset.html
   [75]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/bat-rpls-2/igt@i915_selftest@live@reset.html

  * igt@i915_selftest@live@slpc:
    - bat-rpls-1:         NOTRUN -> [DMESG-WARN][76] ([i915#6367])
   [76]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/bat-rpls-1/igt@i915_selftest@live@slpc.html

  * igt@i915_suspend@basic-s2idle-without-i915:
    - fi-cfl-8109u:       [PASS][77] -> [FAIL][78] ([i915#6121]) +6 similar issues
   [77]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/fi-cfl-8109u/igt@i915_suspend@basic-s2idle-without-i915.html
   [78]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/fi-cfl-8109u/igt@i915_suspend@basic-s2idle-without-i915.html
    - fi-kbl-7567u:       [PASS][79] -> [FAIL][80] ([i915#6121]) +7 similar issues
   [79]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/fi-kbl-7567u/igt@i915_suspend@basic-s2idle-without-i915.html
   [80]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/fi-kbl-7567u/igt@i915_suspend@basic-s2idle-without-i915.html
    - fi-kbl-8809g:       [PASS][81] -> [FAIL][82] ([i915#6121]) +3 similar issues
   [81]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/fi-kbl-8809g/igt@i915_suspend@basic-s2idle-without-i915.html
   [82]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/fi-kbl-8809g/igt@i915_suspend@basic-s2idle-without-i915.html
    - bat-mtlp-6:         [PASS][83] -> [FAIL][84] ([i915#6121]) +2 similar issues
   [83]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/bat-mtlp-6/igt@i915_suspend@basic-s2idle-without-i915.html
   [84]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/bat-mtlp-6/igt@i915_suspend@basic-s2idle-without-i915.html
    - fi-apl-guc:         [PASS][85] -> [FAIL][86] ([i915#6121]) +4 similar issues
   [85]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/fi-apl-guc/igt@i915_suspend@basic-s2idle-without-i915.html
   [86]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/fi-apl-guc/igt@i915_suspend@basic-s2idle-without-i915.html

  * igt@i915_suspend@basic-s3-without-i915:
    - bat-adls-5:         [PASS][87] -> [FAIL][88] ([i915#6121] / [i915#8210])
   [87]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/bat-adls-5/igt@i915_suspend@basic-s3-without-i915.html
   [88]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/bat-adls-5/igt@i915_suspend@basic-s3-without-i915.html
    - bat-dg1-5:          [PASS][89] -> [FAIL][90] ([i915#6121]) +7 similar issues
   [89]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/bat-dg1-5/igt@i915_suspend@basic-s3-without-i915.html
   [90]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/bat-dg1-5/igt@i915_suspend@basic-s3-without-i915.html
    - bat-dg1-7:          [PASS][91] -> [FAIL][92] ([i915#6121]) +3 similar issues
   [91]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/bat-dg1-7/igt@i915_suspend@basic-s3-without-i915.html
   [92]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/bat-dg1-7/igt@i915_suspend@basic-s3-without-i915.html
    - bat-adlp-9:         [PASS][93] -> [FAIL][94] ([i915#6121] / [i915#8210])
   [93]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/bat-adlp-9/igt@i915_suspend@basic-s3-without-i915.html
   [94]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/bat-adlp-9/igt@i915_suspend@basic-s3-without-i915.html

  * igt@kms_chamelium_hpd@common-hpd-after-suspend:
    - fi-tgl-1115g4:      NOTRUN -> [SKIP][95] ([i915#7828])
   [95]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/fi-tgl-1115g4/igt@kms_chamelium_hpd@common-hpd-after-suspend.html
    - fi-hsw-4770:        NOTRUN -> [SKIP][96] ([fdo#109271])
   [96]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/fi-hsw-4770/igt@kms_chamelium_hpd@common-hpd-after-suspend.html
    - bat-rpls-1:         NOTRUN -> [SKIP][97] ([i915#7828])
   [97]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/bat-rpls-1/igt@kms_chamelium_hpd@common-hpd-after-suspend.html
    - fi-pnv-d510:        NOTRUN -> [SKIP][98] ([fdo#109271])
   [98]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/fi-pnv-d510/igt@kms_chamelium_hpd@common-hpd-after-suspend.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic:
    - fi-kbl-soraka:      NOTRUN -> [SKIP][99] ([fdo#109271]) +15 similar issues
   [99]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/fi-kbl-soraka/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic.html

  * igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence:
    - bat-dg2-11:         NOTRUN -> [SKIP][100] ([i915#1845] / [i915#5354]) +3 similar issues
   [100]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/bat-dg2-11/igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence.html

  * igt@kms_pipe_crc_basic@suspend-read-crc:
    - bat-rpls-1:         NOTRUN -> [SKIP][101] ([i915#1845])
   [101]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/bat-rpls-1/igt@kms_pipe_crc_basic@suspend-read-crc.html

  * igt@kms_pipe_crc_basic@suspend-read-crc@pipe-a-hdmi-a-1:
    - fi-cfl-8700k:       [PASS][102] -> [FAIL][103] ([i915#6121]) +6 similar issues
   [102]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/fi-cfl-8700k/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-a-hdmi-a-1.html
   [103]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/fi-cfl-8700k/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-a-hdmi-a-1.html
    - fi-elk-e7500:       [PASS][104] -> [FAIL][105] ([i915#6121]) +5 similar issues
   [104]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/fi-elk-e7500/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-a-hdmi-a-1.html
   [105]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/fi-elk-e7500/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-a-hdmi-a-1.html

  * igt@kms_pipe_crc_basic@suspend-read-crc@pipe-b-dp-1:
    - bat-dg2-8:          [PASS][106] -> [FAIL][107] ([i915#6121]) +6 similar issues
   [106]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/bat-dg2-8/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-b-dp-1.html
   [107]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/bat-dg2-8/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-b-dp-1.html

  * igt@kms_pipe_crc_basic@suspend-read-crc@pipe-b-hdmi-a-1:
    - fi-cfl-guc:         [PASS][108] -> [FAIL][109] ([i915#6121]) +6 similar issues
   [108]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/fi-cfl-guc/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-b-hdmi-a-1.html
   [109]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/fi-cfl-guc/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-b-hdmi-a-1.html

  * igt@kms_pipe_crc_basic@suspend-read-crc@pipe-b-hdmi-a-3:
    - bat-dg2-11:         [PASS][110] -> [FAIL][111] ([i915#6121]) +7 similar issues
   [110]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/bat-dg2-11/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-b-hdmi-a-3.html
   [111]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/bat-dg2-11/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-b-hdmi-a-3.html

  * igt@kms_pipe_crc_basic@suspend-read-crc@pipe-c-dp-1:
    - fi-apl-guc:         NOTRUN -> [FAIL][112] ([i915#6121]) +1 similar issue
   [112]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/fi-apl-guc/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-c-dp-1.html

  * igt@kms_psr@primary_page_flip:
    - bat-rplp-1:         NOTRUN -> [SKIP][113] ([i915#1072]) +1 similar issue
   [113]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/bat-rplp-1/igt@kms_psr@primary_page_flip.html

  * igt@kms_psr@sprite_plane_onoff:
    - bat-rplp-1:         NOTRUN -> [ABORT][114] ([i915#8442] / [i915#8712])
   [114]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/bat-rplp-1/igt@kms_psr@sprite_plane_onoff.html

  
#### Possible fixes ####

  * igt@i915_pm_rpm@basic-rte:
    - fi-tgl-1115g4:      [FAIL][115] ([i915#7940]) -> [PASS][116]
   [115]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/fi-tgl-1115g4/igt@i915_pm_rpm@basic-rte.html
   [116]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/fi-tgl-1115g4/igt@i915_pm_rpm@basic-rte.html

  * igt@i915_pm_rpm@module-reload:
    - fi-rkl-11600:       [FAIL][117] ([i915#7940]) -> [PASS][118]
   [117]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/fi-rkl-11600/igt@i915_pm_rpm@module-reload.html
   [118]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/fi-rkl-11600/igt@i915_pm_rpm@module-reload.html

  * igt@i915_selftest@live@reset:
    - bat-rpls-1:         [ABORT][119] ([i915#4983] / [i915#7461] / [i915#7981] / [i915#8347] / [i915#8384]) -> [PASS][120]
   [119]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/bat-rpls-1/igt@i915_selftest@live@reset.html
   [120]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/bat-rpls-1/igt@i915_selftest@live@reset.html

  * igt@i915_selftest@live@slpc:
    - bat-mtlp-6:         [DMESG-WARN][121] ([i915#6367]) -> [PASS][122]
   [121]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/bat-mtlp-6/igt@i915_selftest@live@slpc.html
   [122]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/bat-mtlp-6/igt@i915_selftest@live@slpc.html

  * igt@kms_pipe_crc_basic@read-crc-frame-sequence@pipe-d-edp-1:
    - bat-rplp-1:         [ABORT][123] ([i915#8442] / [i915#8668]) -> [PASS][124]
   [123]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/bat-rplp-1/igt@kms_pipe_crc_basic@read-crc-frame-sequence@pipe-d-edp-1.html
   [124]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/bat-rplp-1/igt@kms_pipe_crc_basic@read-crc-frame-sequence@pipe-d-edp-1.html

  
#### Warnings ####

  * igt@i915_module_load@load:
    - bat-adlp-11:        [DMESG-WARN][125] ([i915#4423]) -> [ABORT][126] ([i915#4423])
   [125]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/bat-adlp-11/igt@i915_module_load@load.html
   [126]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/bat-adlp-11/igt@i915_module_load@load.html

  * igt@i915_pm_rpm@basic-pci-d3-state:
    - fi-cfl-guc:         [FAIL][127] ([i915#7940]) -> [FAIL][128] ([i915#7691])
   [127]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/fi-cfl-guc/igt@i915_pm_rpm@basic-pci-d3-state.html
   [128]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/fi-cfl-guc/igt@i915_pm_rpm@basic-pci-d3-state.html

  * igt@i915_suspend@basic-s3-without-i915:
    - bat-mtlp-6:         [SKIP][129] ([i915#6645]) -> [FAIL][130] ([i915#6121])
   [129]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/bat-mtlp-6/igt@i915_suspend@basic-s3-without-i915.html
   [130]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/bat-mtlp-6/igt@i915_suspend@basic-s3-without-i915.html
    - fi-kbl-x1275:       [SKIP][131] ([fdo#109271]) -> [FAIL][132] ([i915#6121])
   [131]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/fi-kbl-x1275/igt@i915_suspend@basic-s3-without-i915.html
   [132]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/fi-kbl-x1275/igt@i915_suspend@basic-s3-without-i915.html
    - bat-mtlp-8:         [SKIP][133] ([i915#6645]) -> [FAIL][134] ([i915#6121])
   [133]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/bat-mtlp-8/igt@i915_suspend@basic-s3-without-i915.html
   [134]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/bat-mtlp-8/igt@i915_suspend@basic-s3-without-i915.html
    - bat-dg2-8:          [SKIP][135] ([i915#6645]) -> [FAIL][136] ([i915#6121])
   [135]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13372/bat-dg2-8/igt@i915_suspend@basic-s3-without-i915.html
   [136]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/bat-dg2-8/igt@i915_suspend@basic-s3-without-i915.html

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

  [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
  [i915#1072]: https://gitlab.freedesktop.org/drm/intel/issues/1072
  [i915#1845]: https://gitlab.freedesktop.org/drm/intel/issues/1845
  [i915#1886]: https://gitlab.freedesktop.org/drm/intel/issues/1886
  [i915#2190]: https://gitlab.freedesktop.org/drm/intel/issues/2190
  [i915#4423]: https://gitlab.freedesktop.org/drm/intel/issues/4423
  [i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613
  [i915#4983]: https://gitlab.freedesktop.org/drm/intel/issues/4983
  [i915#5354]: https://gitlab.freedesktop.org/drm/intel/issues/5354
  [i915#6121]: https://gitlab.freedesktop.org/drm/intel/issues/6121
  [i915#6367]: https://gitlab.freedesktop.org/drm/intel/issues/6367
  [i915#6645]: https://gitlab.freedesktop.org/drm/intel/issues/6645
  [i915#7443]: https://gitlab.freedesktop.org/drm/intel/issues/7443
  [i915#7461]: https://gitlab.freedesktop.org/drm/intel/issues/7461
  [i915#7691]: https://gitlab.freedesktop.org/drm/intel/issues/7691
  [i915#7828]: https://gitlab.freedesktop.org/drm/intel/issues/7828
  [i915#7913]: https://gitlab.freedesktop.org/drm/intel/issues/7913
  [i915#7940]: https://gitlab.freedesktop.org/drm/intel/issues/7940
  [i915#7981]: https://gitlab.freedesktop.org/drm/intel/issues/7981
  [i915#8011]: https://gitlab.freedesktop.org/drm/intel/issues/8011
  [i915#8102]: https://gitlab.freedesktop.org/drm/intel/issues/8102
  [i915#8210]: https://gitlab.freedesktop.org/drm/intel/issues/8210
  [i915#8347]: https://gitlab.freedesktop.org/drm/intel/issues/8347
  [i915#8384]: https://gitlab.freedesktop.org/drm/intel/issues/8384
  [i915#8442]: https://gitlab.freedesktop.org/drm/intel/issues/8442
  [i915#8668]: https://gitlab.freedesktop.org/drm/intel/issues/8668
  [i915#8712]: https://gitlab.freedesktop.org/drm/intel/issues/8712
  [i915#8841]: https://gitlab.freedesktop.org/drm/intel/issues/8841
  [i915#8844]: https://gitlab.freedesktop.org/drm/intel/issues/8844


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

  * CI: CI-20190529 -> None
  * IGT: IGT_7380 -> IGTPW_9388

  CI-20190529: 20190529
  CI_DRM_13372: 01c4678ab6c623c621a1dea438133e39711291d4 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_9388: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9388/index.html
  IGT_7380: 8e65f12de2fd52c05dc48fdbcb8cfe86f6de1a75 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git


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

-igt@i915_pm_rps@thresholds
-igt@i915_pm_rps@thresholds-idle
-igt@i915_pm_rps@thresholds-idle-park
-igt@i915_pm_rps@thresholds-park

== Logs ==

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

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

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

* [igt-dev] ○ CI.xeBAT: info for lib/igt_sysfs: add asserting helpers for read/write operations (rev7)
  2023-07-11 17:43 [igt-dev] [PATCH i-g-t v6] lib/igt_sysfs: add asserting helpers for read/write operations Lukasz Laguna
  2023-07-11 17:49 ` Kamil Konieczny
  2023-07-11 18:30 ` [igt-dev] ✗ Fi.CI.BAT: failure for lib/igt_sysfs: add asserting helpers for read/write operations (rev7) Patchwork
@ 2023-07-11 18:41 ` Patchwork
  2 siblings, 0 replies; 4+ messages in thread
From: Patchwork @ 2023-07-11 18:41 UTC (permalink / raw)
  To: Lukasz Laguna; +Cc: igt-dev

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

== Series Details ==

Series: lib/igt_sysfs: add asserting helpers for read/write operations (rev7)
URL   : https://patchwork.freedesktop.org/series/119507/
State : info

== Summary ==

Participating hosts:
bat-pvc-2
bat-atsm-2
bat-dg2-oem2
bat-adlp-7
Missing hosts results[0]:
Results: [IGTPW_9388](https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_9388/index.html)



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

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

end of thread, other threads:[~2023-07-11 18:41 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-07-11 17:43 [igt-dev] [PATCH i-g-t v6] lib/igt_sysfs: add asserting helpers for read/write operations Lukasz Laguna
2023-07-11 17:49 ` Kamil Konieczny
2023-07-11 18:30 ` [igt-dev] ✗ Fi.CI.BAT: failure for lib/igt_sysfs: add asserting helpers for read/write operations (rev7) Patchwork
2023-07-11 18:41 ` [igt-dev] ○ CI.xeBAT: info " 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.