diff mbox

[i-g-t,v4,1/2] lib: move i915_wedged_set to ig_gt.c

Message ID 1456830093-33724-1-git-send-email-daniele.ceraolospurio@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Daniele Ceraolo Spurio March 1, 2016, 11:01 a.m. UTC
From: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>

Upcoming tests will call it to recover from bad states caused by
hangcheck bugs.the function was renamed to igt_force_gpu_reset to have a
naming closer to other hang-related functions in the same file.

The value written to the debugfs has also been changed to -1; this makes
no differences with the current implementation but copes with upcoming
TDR changes (still under discussion) that should allow the resetting of
a mask of rings.

Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
---
 lib/igt_gt.c    | 23 +++++++++++++++++++++++
 lib/igt_gt.h    |  2 ++
 tests/gem_eio.c | 17 +----------------
 3 files changed, 26 insertions(+), 16 deletions(-)
diff mbox

Patch

diff --git a/lib/igt_gt.c b/lib/igt_gt.c
index 9f8634b..7235519 100644
--- a/lib/igt_gt.c
+++ b/lib/igt_gt.c
@@ -269,6 +269,29 @@  void igt_post_hang_ring(int fd, struct igt_hang_ring arg)
 	}
 }
 
+/**
+ * igt_force_gpu_reset:
+ *
+ * forces a gpu reset using the i915_wedged debugfs interface. To be used to
+ * recover from situations where the hangcheck didn't trigger and/or the gpu is
+ * stuck, either because the test manually disabled gpu resets or because the
+ * test hit an hangcheck bug
+ */
+void igt_force_gpu_reset(void)
+{
+	int fd, ret;
+
+	igt_debug("Triggering GPU reset\n");
+
+	fd = igt_debugfs_open("i915_wedged", O_RDWR);
+	igt_require(fd >= 0);
+
+	ret = write(fd, "-1\n", 3);
+	close(fd);
+
+	igt_assert_eq(ret, 3);
+}
+
 /* GPU abusers */
 static struct igt_helper_process hang_helper;
 static void __attribute__((noreturn))
diff --git a/lib/igt_gt.h b/lib/igt_gt.h
index b7c5c4a..ad993c1 100644
--- a/lib/igt_gt.h
+++ b/lib/igt_gt.h
@@ -48,6 +48,8 @@  struct igt_hang_ring igt_hang_ctx(int fd,
 struct igt_hang_ring igt_hang_ring(int fd, int ring);
 void igt_post_hang_ring(int fd, struct igt_hang_ring arg);
 
+void igt_force_gpu_reset(void);
+
 void igt_fork_hang_helper(void);
 void igt_stop_hang_helper(void);
 
diff --git a/tests/gem_eio.c b/tests/gem_eio.c
index d209816..ab3facc 100644
--- a/tests/gem_eio.c
+++ b/tests/gem_eio.c
@@ -58,24 +58,9 @@  static bool i915_reset_control(bool enable)
 	return ret;
 }
 
-static bool i915_wedged_set(void)
-{
-	int fd, ret;
-
-	igt_debug("Triggering GPU reset\n");
-
-	fd = igt_debugfs_open("i915_wedged", O_RDWR);
-	igt_require(fd >= 0);
-
-	ret = write(fd, "1\n", 2) == 2;
-	close(fd);
-
-	return ret;
-}
-
 static void trigger_reset(int fd)
 {
-	igt_assert(i915_wedged_set());
+	igt_force_gpu_reset();
 
 	/* And just check the gpu is indeed running again */
 	igt_debug("Checking that the GPU recovered\n");