core: Inject subtest message into dmesg

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@chris-wilson.co.uk>
This commit is contained in:
Chris Wilson 2014-07-24 12:46:00 +01:00
parent 66e46630f8
commit 52915fc88a

View File

@ -269,8 +269,9 @@ static void print_version(void)
uts.sysname, uts.release, uts.machine); uts.sysname, uts.release, uts.machine);
} }
static void print_usage(const char *command_str, const char *help_str, static const char *command_str;
bool output_on_stderr)
static void print_usage(const char *help_str, bool output_on_stderr)
{ {
FILE *f = output_on_stderr ? stderr : stdout; FILE *f = output_on_stderr ? stderr : stdout;
@ -306,7 +307,6 @@ static int common_init(int argc, char **argv,
{"debug", 0, 0, 'd'}, {"debug", 0, 0, 'd'},
{"help", 0, 0, 'h'}, {"help", 0, 0, 'h'},
}; };
const char *command_str;
char *short_opts; char *short_opts;
struct option *combined_opts; struct option *combined_opts;
int extra_opt_count; int extra_opt_count;
@ -364,11 +364,11 @@ static int common_init(int argc, char **argv,
run_single_subtest = strdup(optarg); run_single_subtest = strdup(optarg);
break; break;
case 'h': case 'h':
print_usage(command_str, help_str, false); print_usage(help_str, false);
ret = -1; ret = -1;
goto out; goto out;
case '?': case '?':
print_usage(command_str, help_str, true); print_usage(help_str, true);
ret = -2; ret = -2;
goto out; goto out;
default: default:
@ -498,6 +498,24 @@ void igt_simple_init_parse_opts(int argc, char **argv,
extra_opt_handler); extra_opt_handler);
} }
__attribute__((format(printf, 1, 2)))
static void kmsg(const char *format, ...)
#define KERN_INFO "<5>"
{
va_list ap;
FILE *file;
file = fopen("/dev/kmsg", "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 * Note: Testcases which use these helpers MUST NOT output anything to stdout
* outside of places protected by igt_run_subtest checks - the piglit * outside of places protected by igt_run_subtest checks - the piglit
@ -529,6 +547,8 @@ bool __igt_run_subtest(const char *subtest_name)
return false; return false;
} }
kmsg(KERN_INFO "%s: starting subtest %s\n", command_str, subtest_name);
return (in_subtest = subtest_name); return (in_subtest = subtest_name);
} }