[Intel-gfx] [PATCH] igt_core: Inject subtest message into dmesg

Chris Wilson chris at chris-wilson.co.uk
Thu Jul 24 13:48:33 CEST 2014


One of the side-effects we test for are kernel oops and knowing the
guilty subtest can help speed up debugging. We can write to /dev/kmsg to
inject messages into dmesg, so let's do so before the start of every
test.

Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
---
 lib/igt_core.c | 29 ++++++++++++++++++++++++-----
 1 file changed, 24 insertions(+), 5 deletions(-)

diff --git a/lib/igt_core.c b/lib/igt_core.c
index b0800e8..deaf145 100644
--- a/lib/igt_core.c
+++ b/lib/igt_core.c
@@ -269,8 +269,9 @@ static void print_version(void)
 		uts.sysname, uts.release, uts.machine);
 }
 
-static void print_usage(const char *command_str, const char *help_str,
-			bool output_on_stderr)
+static const char *command_str;
+
+static void print_usage(const char *help_str, bool output_on_stderr)
 {
 	FILE *f = output_on_stderr ? stderr : stdout;
 
@@ -306,7 +307,6 @@ static int common_init(int argc, char **argv,
 		{"debug", 0, 0, 'd'},
 		{"help", 0, 0, 'h'},
 	};
-	const char *command_str;
 	char *short_opts;
 	struct option *combined_opts;
 	int extra_opt_count;
@@ -364,11 +364,11 @@ static int common_init(int argc, char **argv,
 				run_single_subtest = strdup(optarg);
 			break;
 		case 'h':
-			print_usage(command_str, help_str, false);
+			print_usage(help_str, false);
 			ret = -1;
 			goto out;
 		case '?':
-			print_usage(command_str, help_str, true);
+			print_usage(help_str, true);
 			ret = -2;
 			goto out;
 		default:
@@ -498,6 +498,23 @@ void igt_simple_init_parse_opts(int argc, char **argv,
 		    extra_opt_handler);
 }
 
+__attribute__((format(printf, 2, 3)))
+static void echo(const char *path, const char *format, ...)
+{
+	va_list ap;
+	FILE *file;
+
+	file = fopen(path, "w");
+	if (file == NULL)
+		return;
+
+	va_start(ap, format);
+	vfprintf(file, format, ap);
+	va_end(ap);
+
+	fclose(file);
+}
+
 /*
  * Note: Testcases which use these helpers MUST NOT output anything to stdout
  * outside of places protected by igt_run_subtest checks - the piglit
@@ -529,6 +546,8 @@ bool __igt_run_subtest(const char *subtest_name)
 		return false;
 	}
 
+	echo("/dev/kmsg", "%s: starting subtest %s\n", command_str, subtest_name);
+
 	return (in_subtest = subtest_name);
 }
 
-- 
1.9.1




More information about the Intel-gfx mailing list