aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/util/parse-events.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/perf/util/parse-events.c')
-rw-r--r--tools/perf/util/parse-events.c18
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
1736static void parse_events_print_error(struct parse_events_error *err, 1742void 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}