diff options
Diffstat (limited to 'tools/perf/util/parse-events.c')
-rw-r--r-- | tools/perf/util/parse-events.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c index a9bdcab8c070..89172fd0038b 100644 --- a/tools/perf/util/parse-events.c +++ b/tools/perf/util/parse-events.c | |||
@@ -6,6 +6,7 @@ | |||
6 | #include "exec_cmd.h" | 6 | #include "exec_cmd.h" |
7 | #include "string.h" | 7 | #include "string.h" |
8 | #include "cache.h" | 8 | #include "cache.h" |
9 | #include "header.h" | ||
9 | 10 | ||
10 | int nr_counters; | 11 | int nr_counters; |
11 | 12 | ||
@@ -687,11 +688,35 @@ modifier: | |||
687 | return ret; | 688 | return ret; |
688 | } | 689 | } |
689 | 690 | ||
691 | static void store_event_type(const char *orgname) | ||
692 | { | ||
693 | char filename[PATH_MAX], *c; | ||
694 | FILE *file; | ||
695 | int id; | ||
696 | |||
697 | sprintf(filename, "/sys/kernel/debug/tracing/events/%s/id", orgname); | ||
698 | c = strchr(filename, ':'); | ||
699 | if (c) | ||
700 | *c = '/'; | ||
701 | |||
702 | file = fopen(filename, "r"); | ||
703 | if (!file) | ||
704 | return; | ||
705 | if (fscanf(file, "%i", &id) < 1) | ||
706 | die("cannot store event ID"); | ||
707 | fclose(file); | ||
708 | perf_header__push_event(id, orgname); | ||
709 | } | ||
710 | |||
711 | |||
690 | int parse_events(const struct option *opt __used, const char *str, int unset __used) | 712 | int parse_events(const struct option *opt __used, const char *str, int unset __used) |
691 | { | 713 | { |
692 | struct perf_counter_attr attr; | 714 | struct perf_counter_attr attr; |
693 | enum event_result ret; | 715 | enum event_result ret; |
694 | 716 | ||
717 | if (strchr(str, ':')) | ||
718 | store_event_type(str); | ||
719 | |||
695 | for (;;) { | 720 | for (;;) { |
696 | if (nr_counters == MAX_COUNTERS) | 721 | if (nr_counters == MAX_COUNTERS) |
697 | return -1; | 722 | return -1; |