[Intel-gfx] [PATCH i-g-t v2] igt/drv_hangman: Fix clear_error_state

Michel Thierry michel.thierry at intel.com
Thu Feb 23 02:31:18 UTC 2017


clear_error_state was not doing anything (igt_sysfs_set was not writing to
the error file because strlen was 0).

Also fix assert_entry to catch this issue; strcasecmp returns 0 when
there's a match, or an integer in a mismatch.

v2: Use new igt_sysfs_write, add len > 0 assert in igt_sysfs_set to
catch future errors, clean-up strcasecmp logic (Chris).

Cc: Chris Wilson <chris at chris-wilson.co.uk>
Fixes: 79c6a84ca85b ("igt/drv_hangman: Migrate to sysfs")
Signed-off-by: Michel Thierry <michel.thierry at intel.com>
---
 lib/igt_sysfs.c     | 26 ++++++++++++++++++++++++++
 lib/igt_sysfs.h     |  1 +
 tests/drv_hangman.c |  4 ++--
 3 files changed, 29 insertions(+), 2 deletions(-)

diff --git a/lib/igt_sysfs.c b/lib/igt_sysfs.c
index ded10a67..d244d9b6 100644
--- a/lib/igt_sysfs.c
+++ b/lib/igt_sysfs.c
@@ -172,6 +172,31 @@ int igt_sysfs_open_parameters(int device)
 
 	return params;
 }
+
+/**
+ * igt_sysfs_write:
+ * @dir: directory for the device from igt_sysfs_open()
+ * @attr: name of the sysfs node to open
+ *
+ * This writes a single byte to the sysfs file.
+ *
+ * Returns:
+ * True on success, false on failure.
+ */
+bool igt_sysfs_write(int dir, const char *attr)
+{
+	int fd, ret;
+
+	fd = openat(dir, attr, O_WRONLY);
+	if (fd < 0)
+		return false;
+
+	ret = write(fd, "\0", 1);
+	close(fd);
+
+	return ret;
+}
+
 /**
  * igt_sysfs_set:
  * @dir: directory for the device from igt_sysfs_open()
@@ -192,6 +217,7 @@ bool igt_sysfs_set(int dir, const char *attr, const char *value)
 		return false;
 
 	len = strlen(value);
+	igt_assert(len > 0);
 	ret = writeN(fd, value, len);
 	close(fd);
 
diff --git a/lib/igt_sysfs.h b/lib/igt_sysfs.h
index 69b2e5ec..145a9be6 100644
--- a/lib/igt_sysfs.h
+++ b/lib/igt_sysfs.h
@@ -29,6 +29,7 @@
 
 int igt_sysfs_open(int device, int *idx);
 int igt_sysfs_open_parameters(int device);
+bool igt_sysfs_write(int dir, const char *attr);
 bool igt_sysfs_set(int dir, const char *attr, const char *value);
 char *igt_sysfs_get(int dir, const char *attr);
 
diff --git a/tests/drv_hangman.c b/tests/drv_hangman.c
index cafdf4c1..df9c763f 100644
--- a/tests/drv_hangman.c
+++ b/tests/drv_hangman.c
@@ -58,7 +58,7 @@ static void assert_entry(const char *s, bool expect)
 	error = igt_sysfs_get(sysfs, "error");
 	igt_assert(error);
 
-	igt_assert_f(strcasecmp(error, s) != expect,
+	igt_assert_f(!!strcasecmp(error, s) != expect,
 		     "contents of error: '%s' (expected %s '%s')\n",
 		     error, expect ? "": "not", s);
 
@@ -77,7 +77,7 @@ static void assert_error_state_collected(void)
 
 static void clear_error_state(void)
 {
-	igt_sysfs_set(sysfs, "error", "");
+	igt_sysfs_write(sysfs, "error");
 }
 
 static void test_error_state_basic(void)
-- 
2.11.0



More information about the Intel-gfx mailing list