diff options
author | Vaibhav Nagarnaik <vnagarnaik@google.com> | 2011-08-11 15:37:38 -0400 |
---|---|---|
committer | Steven Rostedt <rostedt@goodmis.org> | 2011-08-18 21:37:56 -0400 |
commit | 2f9502685d7938128e51b13154fc8a84b80d3fb6 (patch) | |
tree | 4464c4362ab010f7a140a6aae9670aab56d083bf | |
parent | 72a8ce0acbe2c51b2a7e9f04f1b47057ba01d62b (diff) |
trace-cmd: Add --check-events to report
Add a new option --check-events to the report target which makes sure
that the event formats in the trace data file can be parsed correctly on
the machine that trace-cmd is running on. It returns EINVAL(22) for
parsing failures and 0 for success.
Cc: Michael Rubin <mrubin@google.com>
Cc: David Sharp <dhsharp@google.com>
Signed-off-by: Vaibhav Nagarnaik <vnagarnaik@google.com>
Link: http://lkml.kernel.org/r/1313091459-12049-4-git-send-email-vnagarnaik@google.com
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
-rw-r--r-- | trace-input.c | 16 | ||||
-rw-r--r-- | trace-read.c | 20 | ||||
-rw-r--r-- | trace-usage.c | 1 |
3 files changed, 29 insertions, 8 deletions
diff --git a/trace-input.c b/trace-input.c index 723d47f..8c2b858 100644 --- a/trace-input.c +++ b/trace-input.c | |||
@@ -342,10 +342,12 @@ static int read_ftrace_file(struct tracecmd_input *handle, | |||
342 | return -1; | 342 | return -1; |
343 | } | 343 | } |
344 | 344 | ||
345 | if (print) | 345 | if (print) { |
346 | printf("%.*s\n", (int)size, buf); | 346 | printf("%.*s\n", (int)size, buf); |
347 | else | 347 | } else { |
348 | pevent_parse_event(pevent, buf, size, "ftrace"); | 348 | if (pevent_parse_event(pevent, buf, size, "ftrace")) |
349 | pevent->parsing_failures = 1; | ||
350 | } | ||
349 | free(buf); | 351 | free(buf); |
350 | 352 | ||
351 | return 0; | 353 | return 0; |
@@ -367,10 +369,12 @@ static int read_event_file(struct tracecmd_input *handle, | |||
367 | return -1; | 369 | return -1; |
368 | } | 370 | } |
369 | 371 | ||
370 | if (print) | 372 | if (print) { |
371 | printf("%.*s\n", (int)size, buf); | 373 | printf("%.*s\n", (int)size, buf); |
372 | else | 374 | } else { |
373 | pevent_parse_event(pevent, buf, size, system); | 375 | if (pevent_parse_event(pevent, buf, size, system)) |
376 | pevent->parsing_failures = 1; | ||
377 | } | ||
374 | free(buf); | 378 | free(buf); |
375 | 379 | ||
376 | return 0; | 380 | return 0; |
diff --git a/trace-read.c b/trace-read.c index 38e3534..2e45bff 100644 --- a/trace-read.c +++ b/trace-read.c | |||
@@ -826,6 +826,7 @@ static void process_plugin_option(char *option) | |||
826 | } | 826 | } |
827 | 827 | ||
828 | enum { | 828 | enum { |
829 | OPT_check_event_parsing = 252, | ||
829 | OPT_kallsyms = 253, | 830 | OPT_kallsyms = 253, |
830 | OPT_events = 254, | 831 | OPT_events = 254, |
831 | OPT_cpu = 255, | 832 | OPT_cpu = 255, |
@@ -848,6 +849,8 @@ void trace_report (int argc, char **argv) | |||
848 | int test_filters = 0; | 849 | int test_filters = 0; |
849 | int raw = 0; | 850 | int raw = 0; |
850 | int neg = 0; | 851 | int neg = 0; |
852 | int ret = 0; | ||
853 | int check_event_parsing = 0; | ||
851 | int c; | 854 | int c; |
852 | 855 | ||
853 | list_head_init(&handle_list); | 856 | list_head_init(&handle_list); |
@@ -868,6 +871,8 @@ void trace_report (int argc, char **argv) | |||
868 | {"events", no_argument, NULL, OPT_events}, | 871 | {"events", no_argument, NULL, OPT_events}, |
869 | {"filter-test", no_argument, NULL, 'T'}, | 872 | {"filter-test", no_argument, NULL, 'T'}, |
870 | {"kallsyms", required_argument, NULL, OPT_kallsyms}, | 873 | {"kallsyms", required_argument, NULL, OPT_kallsyms}, |
874 | {"check-events", no_argument, NULL, | ||
875 | OPT_check_event_parsing}, | ||
871 | {"help", no_argument, NULL, '?'}, | 876 | {"help", no_argument, NULL, '?'}, |
872 | {NULL, 0, NULL, 0} | 877 | {NULL, 0, NULL, 0} |
873 | }; | 878 | }; |
@@ -948,6 +953,9 @@ void trace_report (int argc, char **argv) | |||
948 | case OPT_kallsyms: | 953 | case OPT_kallsyms: |
949 | functions = optarg; | 954 | functions = optarg; |
950 | break; | 955 | break; |
956 | case OPT_check_event_parsing: | ||
957 | check_event_parsing = 1; | ||
958 | break; | ||
951 | default: | 959 | default: |
952 | usage(argv); | 960 | usage(argv); |
953 | } | 961 | } |
@@ -1005,8 +1013,16 @@ void trace_report (int argc, char **argv) | |||
1005 | return; | 1013 | return; |
1006 | } | 1014 | } |
1007 | 1015 | ||
1008 | if (tracecmd_read_headers(handle) < 0) | 1016 | ret = tracecmd_read_headers(handle); |
1009 | return; | 1017 | if (check_event_parsing) { |
1018 | if (ret || pevent->parsing_failures) | ||
1019 | exit(EINVAL); | ||
1020 | else | ||
1021 | exit(0); | ||
1022 | } else { | ||
1023 | if (ret) | ||
1024 | return; | ||
1025 | } | ||
1010 | 1026 | ||
1011 | if (show_funcs) { | 1027 | if (show_funcs) { |
1012 | pevent_print_funcs(pevent); | 1028 | pevent_print_funcs(pevent); |
diff --git a/trace-usage.c b/trace-usage.c index 7314657..0e2194e 100644 --- a/trace-usage.c +++ b/trace-usage.c | |||
@@ -91,6 +91,7 @@ static struct usage_help usage_help[] = { | |||
91 | " -w show wakeup latencies\n" | 91 | " -w show wakeup latencies\n" |
92 | " -l show latency format (default with latency tracers)\n" | 92 | " -l show latency format (default with latency tracers)\n" |
93 | " -O plugin option -O [plugin:]var[=val]\n" | 93 | " -O plugin option -O [plugin:]var[=val]\n" |
94 | " --check-events return whether all event formats can be parsed\n" | ||
94 | }, | 95 | }, |
95 | { | 96 | { |
96 | "split", | 97 | "split", |