perf auxtrace: Add optional error flags to the itrace 'e' option
Allow the 'e' option to be followed by flags which will affect what errors will or will not be reported. Each flag must be preceded by either '+' or '-'. The flags are: o overflow l trace data lost Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Reviewed-by: Andi Kleen <ak@linux.intel.com> Cc: Jiri Olsa <jolsa@redhat.com> Link: http://lore.kernel.org/lkml/20200710151104.15137-6-adrian.hunter@intel.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:

committed by
Arnaldo Carvalho de Melo

parent
1e8f786944
commit
cb971438b7
@@ -1349,6 +1349,47 @@ void itrace_synth_opts__set_default(struct itrace_synth_opts *synth_opts,
|
||||
synth_opts->initial_skip = 0;
|
||||
}
|
||||
|
||||
static int get_flag(const char **ptr, unsigned int *flags)
|
||||
{
|
||||
while (1) {
|
||||
char c = **ptr;
|
||||
|
||||
if (c >= 'a' && c <= 'z') {
|
||||
*flags |= 1 << (c - 'a');
|
||||
++*ptr;
|
||||
return 0;
|
||||
} else if (c == ' ') {
|
||||
++*ptr;
|
||||
continue;
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static int get_flags(const char **ptr, unsigned int *plus_flags, unsigned int *minus_flags)
|
||||
{
|
||||
while (1) {
|
||||
switch (**ptr) {
|
||||
case '+':
|
||||
++*ptr;
|
||||
if (get_flag(ptr, plus_flags))
|
||||
return -1;
|
||||
break;
|
||||
case '-':
|
||||
++*ptr;
|
||||
if (get_flag(ptr, minus_flags))
|
||||
return -1;
|
||||
break;
|
||||
case ' ':
|
||||
++*ptr;
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Please check tools/perf/Documentation/perf-script.txt for information
|
||||
* about the options parsed here, which is introduced after this cset,
|
||||
@@ -1436,6 +1477,9 @@ int itrace_parse_synth_opts(const struct option *opt, const char *str,
|
||||
break;
|
||||
case 'e':
|
||||
synth_opts->errors = true;
|
||||
if (get_flags(&p, &synth_opts->error_plus_flags,
|
||||
&synth_opts->error_minus_flags))
|
||||
goto out_err;
|
||||
break;
|
||||
case 'd':
|
||||
synth_opts->log = true;
|
||||
|
Reference in New Issue
Block a user