diff options
Diffstat (limited to 'tools/perf/util/parse-events.c')
-rw-r--r-- | tools/perf/util/parse-events.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c index 75588920fccc..9183913a6174 100644 --- a/tools/perf/util/parse-events.c +++ b/tools/perf/util/parse-events.c | |||
@@ -1219,11 +1219,17 @@ static int __parse_events_add_pmu(struct parse_events_state *parse_state, | |||
1219 | struct perf_pmu_info info; | 1219 | struct perf_pmu_info info; |
1220 | struct perf_pmu *pmu; | 1220 | struct perf_pmu *pmu; |
1221 | struct perf_evsel *evsel; | 1221 | struct perf_evsel *evsel; |
1222 | struct parse_events_error *err = parse_state->error; | ||
1222 | LIST_HEAD(config_terms); | 1223 | LIST_HEAD(config_terms); |
1223 | 1224 | ||
1224 | pmu = perf_pmu__find(name); | 1225 | pmu = perf_pmu__find(name); |
1225 | if (!pmu) | 1226 | if (!pmu) { |
1227 | if (asprintf(&err->str, | ||
1228 | "Cannot find PMU `%s'. Missing kernel support?", | ||
1229 | name) < 0) | ||
1230 | err->str = NULL; | ||
1226 | return -EINVAL; | 1231 | return -EINVAL; |
1232 | } | ||
1227 | 1233 | ||
1228 | if (pmu->default_config) { | 1234 | if (pmu->default_config) { |
1229 | memcpy(&attr, pmu->default_config, | 1235 | memcpy(&attr, pmu->default_config, |
@@ -1733,8 +1739,8 @@ static int get_term_width(void) | |||
1733 | return ws.ws_col > MAX_WIDTH ? MAX_WIDTH : ws.ws_col; | 1739 | return ws.ws_col > MAX_WIDTH ? MAX_WIDTH : ws.ws_col; |
1734 | } | 1740 | } |
1735 | 1741 | ||
1736 | static void parse_events_print_error(struct parse_events_error *err, | 1742 | void parse_events_print_error(struct parse_events_error *err, |
1737 | const char *event) | 1743 | const char *event) |
1738 | { | 1744 | { |
1739 | const char *str = "invalid or unsupported event: "; | 1745 | const char *str = "invalid or unsupported event: "; |
1740 | char _buf[MAX_WIDTH]; | 1746 | char _buf[MAX_WIDTH]; |
@@ -1789,8 +1795,6 @@ static void parse_events_print_error(struct parse_events_error *err, | |||
1789 | zfree(&err->str); | 1795 | zfree(&err->str); |
1790 | zfree(&err->help); | 1796 | zfree(&err->help); |
1791 | } | 1797 | } |
1792 | |||
1793 | fprintf(stderr, "Run 'perf list' for a list of valid events\n"); | ||
1794 | } | 1798 | } |
1795 | 1799 | ||
1796 | #undef MAX_WIDTH | 1800 | #undef MAX_WIDTH |
@@ -1802,8 +1806,10 @@ int parse_events_option(const struct option *opt, const char *str, | |||
1802 | struct parse_events_error err = { .idx = 0, }; | 1806 | struct parse_events_error err = { .idx = 0, }; |
1803 | int ret = parse_events(evlist, str, &err); | 1807 | int ret = parse_events(evlist, str, &err); |
1804 | 1808 | ||
1805 | if (ret) | 1809 | if (ret) { |
1806 | parse_events_print_error(&err, str); | 1810 | parse_events_print_error(&err, str); |
1811 | fprintf(stderr, "Run 'perf list' for a list of valid events\n"); | ||
1812 | } | ||
1807 | 1813 | ||
1808 | return ret; | 1814 | return ret; |
1809 | } | 1815 | } |