On Fri, Oct 26, 2012 at 01:30:14PM -0700, Andi Kleen wrote: > From: Andi Kleen <a...@linux.intel.com> > > When an event fails to parse and it's not in a new style format, > try to parse it again as a cpu event. > > This allows to use sysfs exported events directly without //, so I can use > > perf record -e tx-aborts ...
hum, seems usefull and hacky ;) would not work for modifier stuff like: tx-aborts:u (not sure if 'u' makes sense for 'tx-aborts'..) but nevermind, seems like usefull shortcut > > instead of > > perf record -e cpu/tx-aborts/ > > v2: Handle multiple events > Signed-off-by: Andi Kleen <a...@linux.intel.com> > --- > tools/perf/util/parse-events.c | 37 +++++++++++++++++++++++++++++++++++++ > 1 files changed, 37 insertions(+), 0 deletions(-) > > diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c > index f800765..ee6a73c 100644 > --- a/tools/perf/util/parse-events.c > +++ b/tools/perf/util/parse-events.c > @@ -768,6 +768,23 @@ int parse_events_name(struct list_head *list, char *name) > return 0; > } > > +static void str_append(char **s, int *len, const char *a) > +{ > + int olen = *s ? strlen(*s) : 0; > + int nlen = olen + strlen(a) + 1; > + if (*len < nlen) { > + *len = *len * 2; > + if (*len < nlen) > + *len = nlen; > + *s = realloc(*s, *len); > + if (!*s) trailing whitespace > + exit(ENOMEM); > + if (olen == 0) > + **s = 0; > + } > + strcat(*s, a); > +} > + > static int parse_events__scanner(const char *str, void *data, int > start_token) > { > YY_BUFFER_STATE buffer; > @@ -788,6 +805,26 @@ static int parse_events__scanner(const char *str, void > *data, int start_token) > parse_events__flush_buffer(buffer, scanner); > parse_events__delete_buffer(buffer, scanner); > parse_events_lex_destroy(scanner); > + > + if (ret && !strchr(str, '/')) { > + char *o = strdup(str); > + char *s = NULL; > + char *t = o; > + char *p; > + int len = 0; > + > + if (!o) > + return ret; > + while ((p = strsep(&t, ",")) != NULL) { > + if (s) > + str_append(&s, &len, ","); > + str_append(&s, &len, "cpu/"); > + str_append(&s, &len, p); > + str_append(&s, &len, "/"); > + } > + free(o); > + ret = parse_events__scanner(s, data, start_token); any chance above could be in separated function? > + } > return ret; > } > > -- > 1.7.7.6 > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/