[Intel-gfx] [PATCH] igt_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 ch...@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 ___ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [Intel-gfx] [PATCH] igt_core: Inject subtest message into dmesg
On Thu, Jul 24, 2014 at 12:48:33PM +0100, Chris Wilson wrote: 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 ch...@chris-wilson.co.uk Should we change proc-comm too? Would help with the oops printing ... Ack on the patch itself. -Daniel --- 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 ___ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch ___ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [Intel-gfx] [PATCH] igt_core: Inject subtest message into dmesg
On 24 July 2014 13:36, Daniel Vetter dan...@ffwll.ch wrote: On Thu, Jul 24, 2014 at 12:48:33PM +0100, Chris Wilson wrote: 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 ch...@chris-wilson.co.uk Should we change proc-comm too? Would help with the oops printing ... Ack on the patch itself. It should also make sure that the log level is appropriate so that the Piglit dmesg capture isn't triggered accidentally. Would it be useful to include this in simple tests (tests without subtests) as well? -Daniel --- 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 ___ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch ___ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/intel-gfx ___ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [Intel-gfx] [PATCH] igt_core: Inject subtest message into dmesg
On Thu, Jul 24, 2014 at 02:03:01PM +0100, Thomas Wood wrote: On 24 July 2014 13:36, Daniel Vetter dan...@ffwll.ch wrote: On Thu, Jul 24, 2014 at 12:48:33PM +0100, Chris Wilson wrote: 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 ch...@chris-wilson.co.uk Should we change proc-comm too? Would help with the oops printing ... Ack on the patch itself. It should also make sure that the log level is appropriate so that the Piglit dmesg capture isn't triggered accidentally. I found out how to set the log-level, so choose KERN_INFO which should be sufficient. Would it be useful to include this in simple tests (tests without subtests) as well? Definitely. Is there a way to do that automatically or do we need to adjust the tests themselves? I was thinkg we could add a kmsg() to common_init() to capture those. -Chris -- Chris Wilson, Intel Open Source Technology Centre ___ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [Intel-gfx] [PATCH] igt_core: Inject subtest message into dmesg
On Thu, Jul 24, 2014 at 02:58:08PM +0100, Chris Wilson wrote: On Thu, Jul 24, 2014 at 02:03:01PM +0100, Thomas Wood wrote: On 24 July 2014 13:36, Daniel Vetter dan...@ffwll.ch wrote: On Thu, Jul 24, 2014 at 12:48:33PM +0100, Chris Wilson wrote: 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 ch...@chris-wilson.co.uk Should we change proc-comm too? Would help with the oops printing ... Ack on the patch itself. It should also make sure that the log level is appropriate so that the Piglit dmesg capture isn't triggered accidentally. I found out how to set the log-level, so choose KERN_INFO which should be sufficient. Would it be useful to include this in simple tests (tests without subtests) as well? Definitely. Is there a way to do that automatically or do we need to adjust the tests themselves? I was thinkg we could add a kmsg() to common_init() to capture those. common_init kmsg'ing the test binary should be good. That should help in lining up any test setup work that's done before the first test starts, too. So useful even with subtests. -Daniel -- Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch ___ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/intel-gfx