Em Wed, Oct 19, 2016 at 10:50:01AM -0700, Andi Kleen escreveu: > From: Andi Kleen <a...@linux.intel.com> > > Make the perf list glob matching for vendor events case insensitive. > This allows to use the upper case vendor events with perf list too. > > Now the following works: > > % perf list LONGEST_LAT > > ... > > cache: > longest_lat_cache.miss > [Core-originated cacheable demand requests missed LLC] > longest_lat_cache.reference > [Core-originated cacheable demand requests that refer to LLC]
Thanks, tested and applied. - Arnaldo > Signed-off-by: Andi Kleen <a...@linux.intel.com> > --- > tools/perf/util/pmu.c | 4 ++-- > tools/perf/util/string.c | 21 ++++++++++++++++----- > tools/perf/util/util.h | 1 + > 3 files changed, 19 insertions(+), 7 deletions(-) > > diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c > index d8d7d4c0319c..101922b2a243 100644 > --- a/tools/perf/util/pmu.c > +++ b/tools/perf/util/pmu.c > @@ -1140,8 +1140,8 @@ void print_pmu_events(const char *event_glob, bool > name_only, bool quiet_flag, > continue; > > if (event_glob != NULL && > - !(strglobmatch(name, event_glob) || > - (!is_cpu && strglobmatch(alias->name, > + !(strglobmatch_nocase(name, event_glob) || > + (!is_cpu && strglobmatch_nocase(alias->name, > event_glob)))) > continue; > > diff --git a/tools/perf/util/string.c b/tools/perf/util/string.c > index 7f7e072be746..d8dfaf64b32e 100644 > --- a/tools/perf/util/string.c > +++ b/tools/perf/util/string.c > @@ -193,7 +193,8 @@ static bool __match_charclass(const char *pat, char c, > const char **npat) > } > > /* Glob/lazy pattern matching */ > -static bool __match_glob(const char *str, const char *pat, bool ignore_space) > +static bool __match_glob(const char *str, const char *pat, bool ignore_space, > + bool case_ins) > { > while (*str && *pat && *pat != '*') { > if (ignore_space) { > @@ -219,8 +220,13 @@ static bool __match_glob(const char *str, const char > *pat, bool ignore_space) > return false; > else if (*pat == '\\') /* Escaped char match as normal char */ > pat++; > - if (*str++ != *pat++) > + if (case_ins) { > + if (tolower(*str) != tolower(*pat)) > + return false; > + } else if (*str != *pat) > return false; > + str++; > + pat++; > } > /* Check wild card */ > if (*pat == '*') { > @@ -229,7 +235,7 @@ static bool __match_glob(const char *str, const char > *pat, bool ignore_space) > if (!*pat) /* Tail wild card matches all */ > return true; > while (*str) > - if (__match_glob(str++, pat, ignore_space)) > + if (__match_glob(str++, pat, ignore_space, case_ins)) > return true; > } > return !*str && !*pat; > @@ -249,7 +255,12 @@ static bool __match_glob(const char *str, const char > *pat, bool ignore_space) > */ > bool strglobmatch(const char *str, const char *pat) > { > - return __match_glob(str, pat, false); > + return __match_glob(str, pat, false, false); > +} > + > +bool strglobmatch_nocase(const char *str, const char *pat) > +{ > + return __match_glob(str, pat, false, true); > } > > /** > @@ -262,7 +273,7 @@ bool strglobmatch(const char *str, const char *pat) > */ > bool strlazymatch(const char *str, const char *pat) > { > - return __match_glob(str, pat, true); > + return __match_glob(str, pat, true, false); > } > > /** > diff --git a/tools/perf/util/util.h b/tools/perf/util/util.h > index 43899e0d6fa1..71b6992f1d98 100644 > --- a/tools/perf/util/util.h > +++ b/tools/perf/util/util.h > @@ -222,6 +222,7 @@ s64 perf_atoll(const char *str); > char **argv_split(const char *str, int *argcp); > void argv_free(char **argv); > bool strglobmatch(const char *str, const char *pat); > +bool strglobmatch_nocase(const char *str, const char *pat); > bool strlazymatch(const char *str, const char *pat); > static inline bool strisglob(const char *str) > { > -- > 2.5.5