aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndi Kleen <ak@linux.intel.com>2016-10-19 13:50:01 -0400
committerArnaldo Carvalho de Melo <acme@redhat.com>2016-10-24 10:07:46 -0400
commit38d14f0c58fd89d46efd1b783d6536380af28c03 (patch)
tree741aca6b936a0e2ff860853ae0e5be815e3f3ede
parentecf1e2253ea79c6204f4d6a5e756e8fb4aed5a7e (diff)
perf list: Make vendor event matching case insensitive
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] Signed-off-by: Andi Kleen <ak@linux.intel.com> Suggested-by: Ingo Molnar <mingo@kernel.org> Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Jiri Olsa <jolsa@kernel.org> Link: http://lkml.kernel.org/r/1476899402-31460-1-git-send-email-andi@firstfloor.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
-rw-r--r--tools/perf/util/pmu.c4
-rw-r--r--tools/perf/util/string.c21
-rw-r--r--tools/perf/util/util.h1
3 files changed, 19 insertions, 7 deletions
diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c
index d7174f340b53..31b845ec32e2 100644
--- a/tools/perf/util/pmu.c
+++ b/tools/perf/util/pmu.c
@@ -1139,8 +1139,8 @@ void print_pmu_events(const char *event_glob, bool name_only, bool quiet_flag,
1139 bool is_cpu = !strcmp(pmu->name, "cpu"); 1139 bool is_cpu = !strcmp(pmu->name, "cpu");
1140 1140
1141 if (event_glob != NULL && 1141 if (event_glob != NULL &&
1142 !(strglobmatch(name, event_glob) || 1142 !(strglobmatch_nocase(name, event_glob) ||
1143 (!is_cpu && strglobmatch(alias->name, 1143 (!is_cpu && strglobmatch_nocase(alias->name,
1144 event_glob)))) 1144 event_glob))))
1145 continue; 1145 continue;
1146 1146
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 @@ error:
193} 193}
194 194
195/* Glob/lazy pattern matching */ 195/* Glob/lazy pattern matching */
196static bool __match_glob(const char *str, const char *pat, bool ignore_space) 196static bool __match_glob(const char *str, const char *pat, bool ignore_space,
197 bool case_ins)
197{ 198{
198 while (*str && *pat && *pat != '*') { 199 while (*str && *pat && *pat != '*') {
199 if (ignore_space) { 200 if (ignore_space) {
@@ -219,8 +220,13 @@ static bool __match_glob(const char *str, const char *pat, bool ignore_space)
219 return false; 220 return false;
220 else if (*pat == '\\') /* Escaped char match as normal char */ 221 else if (*pat == '\\') /* Escaped char match as normal char */
221 pat++; 222 pat++;
222 if (*str++ != *pat++) 223 if (case_ins) {
224 if (tolower(*str) != tolower(*pat))
225 return false;
226 } else if (*str != *pat)
223 return false; 227 return false;
228 str++;
229 pat++;
224 } 230 }
225 /* Check wild card */ 231 /* Check wild card */
226 if (*pat == '*') { 232 if (*pat == '*') {
@@ -229,7 +235,7 @@ static bool __match_glob(const char *str, const char *pat, bool ignore_space)
229 if (!*pat) /* Tail wild card matches all */ 235 if (!*pat) /* Tail wild card matches all */
230 return true; 236 return true;
231 while (*str) 237 while (*str)
232 if (__match_glob(str++, pat, ignore_space)) 238 if (__match_glob(str++, pat, ignore_space, case_ins))
233 return true; 239 return true;
234 } 240 }
235 return !*str && !*pat; 241 return !*str && !*pat;
@@ -249,7 +255,12 @@ static bool __match_glob(const char *str, const char *pat, bool ignore_space)
249 */ 255 */
250bool strglobmatch(const char *str, const char *pat) 256bool strglobmatch(const char *str, const char *pat)
251{ 257{
252 return __match_glob(str, pat, false); 258 return __match_glob(str, pat, false, false);
259}
260
261bool strglobmatch_nocase(const char *str, const char *pat)
262{
263 return __match_glob(str, pat, false, true);
253} 264}
254 265
255/** 266/**
@@ -262,7 +273,7 @@ bool strglobmatch(const char *str, const char *pat)
262 */ 273 */
263bool strlazymatch(const char *str, const char *pat) 274bool strlazymatch(const char *str, const char *pat)
264{ 275{
265 return __match_glob(str, pat, true); 276 return __match_glob(str, pat, true, false);
266} 277}
267 278
268/** 279/**
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);
222char **argv_split(const char *str, int *argcp); 222char **argv_split(const char *str, int *argcp);
223void argv_free(char **argv); 223void argv_free(char **argv);
224bool strglobmatch(const char *str, const char *pat); 224bool strglobmatch(const char *str, const char *pat);
225bool strglobmatch_nocase(const char *str, const char *pat);
225bool strlazymatch(const char *str, const char *pat); 226bool strlazymatch(const char *str, const char *pat);
226static inline bool strisglob(const char *str) 227static inline bool strisglob(const char *str)
227{ 228{