tests/gem_reset_stats: stop rings after injecting hang
authorMika Kuoppala <mika.kuoppala@linux.intel.com>
Wed, 20 Nov 2013 14:58:16 +0000 (16:58 +0200)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Wed, 20 Nov 2013 20:29:04 +0000 (21:29 +0100)
To make driver report a simulated hang in dmesg.

Suggested-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Mika Kuoppala <mika.kuoppala@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
tests/gem_reset_stats.c

index 84841c3..8dfef72 100644 (file)
@@ -42,6 +42,7 @@
 #include "intel_batchbuffer.h"
 #include "intel_gpu_tools.h"
 #include "rendercopy.h"
+#include "igt_debugfs.h"
 
 #define RS_NO_ERROR      0
 #define RS_BATCH_ACTIVE  (1 << 0)
@@ -73,6 +74,8 @@ struct local_drm_i915_gem_context_destroy {
 #define CONTEXT_DESTROY_IOCTL DRM_IOWR(DRM_COMMAND_BASE + 0x2e, struct local_drm_i915_gem_context_destroy)
 #define GET_RESET_STATS_IOCTL DRM_IOWR(DRM_COMMAND_BASE + 0x32, struct local_drm_i915_reset_stats)
 
+static igt_debugfs_t dfs;
+
 static uint32_t context_create(int fd)
 {
        struct local_drm_i915_gem_context_create create;
@@ -192,6 +195,17 @@ static int exec_valid(int fd, int ctx)
        return exec.handle;
 }
 
+static void stop_rings(void)
+{
+       int fd;
+
+       fd = igt_debugfs_open(&dfs, "i915_ring_stop", O_WRONLY);
+       igt_assert(fd >= 0);
+
+       igt_assert(write(fd, "0xff", 4) == 4);
+       close(fd);
+}
+
 #define BUFSIZE (4 * 1024)
 #define ITEMS   (BUFSIZE >> 2)
 
@@ -284,6 +298,8 @@ static int inject_hang(int fd, int ctx)
 
        free(buf);
 
+       stop_rings();
+
        return exec.handle;
 }
 
@@ -743,6 +759,8 @@ igt_main
                              "Kernel is too old, or contexts not supported: %s\n",
                              strerror(errno));
 
+               assert(igt_debugfs_init(&dfs) == 0);
+
                close(fd);
        }