* [PATCH] perf, tools: Improve error messages for missing PMUs
@ 2017-09-12 0:26 Andi Kleen
2017-09-13 13:34 ` Arnaldo Carvalho de Melo
0 siblings, 1 reply; 5+ messages in thread
From: Andi Kleen @ 2017-09-12 0:26 UTC (permalink / raw)
To: acme; +Cc: jolsa, linux-kernel, Andi Kleen
From: Andi Kleen <ak@linux.intel.com>
When a PMU is missing print a better error message mentioning
the missing PMU.
% mkdir empty
% mount --bind empty /sys/devices/msr
% perf stat -M Summary true
event syntax error: '{inst_retired.any,cycles}:W,{cpu_clk_unhalted.thread}:W,{inst_retired.any}:W,{cpu_clk_unhalted.ref_tsc,msr/tsc/}:W,{fp_comp_ops_exe.sse_scalar..'
\___ Cannot find PMU `msr'. Missing kernel support?
It still cannot find the right column for aliases, but it's already a vast improvement.
Signed-off-by: Andi Kleen <ak@linux.intel.com>
---
tools/perf/util/metricgroup.c | 2 +-
tools/perf/util/parse-events.c | 17 +++++++++++------
tools/perf/util/parse-events.h | 3 +++
3 files changed, 15 insertions(+), 7 deletions(-)
diff --git a/tools/perf/util/metricgroup.c b/tools/perf/util/metricgroup.c
index 2d60114f1870..0794f02cbb8f 100644
--- a/tools/perf/util/metricgroup.c
+++ b/tools/perf/util/metricgroup.c
@@ -477,7 +477,7 @@ int metricgroup__parse_groups(const struct option *opt,
memset(&parse_error, 0, sizeof(struct parse_events_error));
ret = parse_events(perf_evlist, extra_events.buf, &parse_error);
if (ret) {
- pr_err("Cannot set up events %s\n", extra_events.buf);
+ parse_events_print_error(&parse_error, extra_events.buf);
goto out;
}
strbuf_release(&extra_events);
diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
index 97507d5c37dc..69032262a703 100644
--- a/tools/perf/util/parse-events.c
+++ b/tools/perf/util/parse-events.c
@@ -1218,11 +1218,16 @@ int parse_events_add_pmu(struct parse_events_state *parse_state,
struct perf_pmu_info info;
struct perf_pmu *pmu;
struct perf_evsel *evsel;
+ struct parse_events_error *err = parse_state->error;
LIST_HEAD(config_terms);
pmu = perf_pmu__find(name);
- if (!pmu)
+ if (!pmu) {
+ (void)asprintf(&err->str,
+ "Cannot find PMU `%s'. Missing kernel support?",
+ name);
return -EINVAL;
+ }
if (pmu->default_config) {
memcpy(&attr, pmu->default_config,
@@ -1725,8 +1730,8 @@ static int get_term_width(void)
return ws.ws_col > MAX_WIDTH ? MAX_WIDTH : ws.ws_col;
}
-static void parse_events_print_error(struct parse_events_error *err,
- const char *event)
+void parse_events_print_error(struct parse_events_error *err,
+ const char *event)
{
const char *str = "invalid or unsupported event: ";
char _buf[MAX_WIDTH];
@@ -1781,8 +1786,6 @@ static void parse_events_print_error(struct parse_events_error *err,
zfree(&err->str);
zfree(&err->help);
}
-
- fprintf(stderr, "Run 'perf list' for a list of valid events\n");
}
#undef MAX_WIDTH
@@ -1794,8 +1797,10 @@ int parse_events_option(const struct option *opt, const char *str,
struct parse_events_error err = { .idx = 0, };
int ret = parse_events(evlist, str, &err);
- if (ret)
+ if (ret) {
parse_events_print_error(&err, str);
+ fprintf(stderr, "Run 'perf list' for a list of valid events\n");
+ }
return ret;
}
diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h
index 635135125111..3909ca0639f2 100644
--- a/tools/perf/util/parse-events.h
+++ b/tools/perf/util/parse-events.h
@@ -202,6 +202,9 @@ int is_valid_tracepoint(const char *event_string);
int valid_event_mount(const char *eventfs);
char *parse_events_formats_error_string(char *additional_terms);
+void parse_events_print_error(struct parse_events_error *err,
+ const char *event);
+
#ifdef HAVE_LIBELF_SUPPORT
/*
* If the probe point starts with '%',
--
2.9.5
^ permalink raw reply related [flat|nested] 5+ messages in thread* Re: [PATCH] perf, tools: Improve error messages for missing PMUs
2017-09-12 0:26 [PATCH] perf, tools: Improve error messages for missing PMUs Andi Kleen
@ 2017-09-13 13:34 ` Arnaldo Carvalho de Melo
0 siblings, 0 replies; 5+ messages in thread
From: Arnaldo Carvalho de Melo @ 2017-09-13 13:34 UTC (permalink / raw)
To: Andi Kleen; +Cc: jolsa, linux-kernel, Andi Kleen
Em Mon, Sep 11, 2017 at 05:26:36PM -0700, Andi Kleen escreveu:
> From: Andi Kleen <ak@linux.intel.com>
>
> When a PMU is missing print a better error message mentioning
> the missing PMU.
>
> % mkdir empty
> % mount --bind empty /sys/devices/msr
> % perf stat -M Summary true
> event syntax error: '{inst_retired.any,cycles}:W,{cpu_clk_unhalted.thread}:W,{inst_retired.any}:W,{cpu_clk_unhalted.ref_tsc,msr/tsc/}:W,{fp_comp_ops_exe.sse_scalar..'
> \___ Cannot find PMU `msr'. Missing kernel support?
>
> It still cannot find the right column for aliases, but it's already a vast improvement.
CC /tmp/build/perf/util/parse-events.o
util/parse-events.c: In function ‘__parse_events_add_pmu’:
util/parse-events.c:1227:3: error: ignoring return value of ‘asprintf’, declared with attribute warn_unused_result [-Werror=unused-result]
(void)asprintf(&err->str,
^~~~~~~~~~~~~~~~~~~~~~~~~
"Cannot find PMU `%s'. Missing kernel support?",
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
name);
~~~~~
cc1: all warnings being treated as errors
mv: cannot stat '/tmp/build/perf/util/.parse-events.o.tmp': No such file or directory
make[4]: *** [/home/acme/git/linux/tools/build/Makefile.build:95: /tmp/build/perf/util/parse-events.o] Error 1
make[3]: *** [/home/acme/git/linux/tools/build/Makefile.build:138: util] Error 2
make[2]: *** [Makefile.perf:595: /tmp/build/perf/libperf-in.o] Error 2
make[1]: *** [Makefile.perf:210: sub-make] Error 2
make: *** [Makefile:109: install-bin] Error 2
make: Leaving directory '/home/acme/git/linux/tools/perf'
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH] perf, tools: Improve error messages for missing PMUs
@ 2017-09-13 21:50 Andi Kleen
2017-09-15 18:45 ` Jiri Olsa
0 siblings, 1 reply; 5+ messages in thread
From: Andi Kleen @ 2017-09-13 21:50 UTC (permalink / raw)
To: acme; +Cc: linux-kernel, jolsa, Andi Kleen
From: Andi Kleen <ak@linux.intel.com>
When a PMU is missing print a better error message mentioning
the missing PMU.
% mkdir empty
% mount --bind empty /sys/devices/msr
% perf stat -M Summary true
event syntax error: '{inst_retired.any,cycles}:W,{cpu_clk_unhalted.thread}:W,{inst_retired.any}:W,{cpu_clk_unhalted.ref_tsc,msr/tsc/}:W,{fp_comp_ops_exe.sse_scalar..'
\___ Cannot find PMU `msr'. Missing kernel support?
It still cannot find the right column for aliases, but it's already a vast improvement.
v2: Check asprintf
Signed-off-by: Andi Kleen <ak@linux.intel.com>
---
tools/perf/util/metricgroup.c | 2 +-
tools/perf/util/parse-events.c | 18 ++++++++++++------
tools/perf/util/parse-events.h | 3 +++
3 files changed, 16 insertions(+), 7 deletions(-)
diff --git a/tools/perf/util/metricgroup.c b/tools/perf/util/metricgroup.c
index 2d60114f1870..0794f02cbb8f 100644
--- a/tools/perf/util/metricgroup.c
+++ b/tools/perf/util/metricgroup.c
@@ -477,7 +477,7 @@ int metricgroup__parse_groups(const struct option *opt,
memset(&parse_error, 0, sizeof(struct parse_events_error));
ret = parse_events(perf_evlist, extra_events.buf, &parse_error);
if (ret) {
- pr_err("Cannot set up events %s\n", extra_events.buf);
+ parse_events_print_error(&parse_error, extra_events.buf);
goto out;
}
strbuf_release(&extra_events);
diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
index 97507d5c37dc..26c59a4009aa 100644
--- a/tools/perf/util/parse-events.c
+++ b/tools/perf/util/parse-events.c
@@ -1218,11 +1218,17 @@ int parse_events_add_pmu(struct parse_events_state *parse_state,
struct perf_pmu_info info;
struct perf_pmu *pmu;
struct perf_evsel *evsel;
+ struct parse_events_error *err = parse_state->error;
LIST_HEAD(config_terms);
pmu = perf_pmu__find(name);
- if (!pmu)
+ if (!pmu) {
+ if (asprintf(&err->str,
+ "Cannot find PMU `%s'. Missing kernel support?",
+ name) < 0)
+ err->str = NULL;
return -EINVAL;
+ }
if (pmu->default_config) {
memcpy(&attr, pmu->default_config,
@@ -1725,8 +1731,8 @@ static int get_term_width(void)
return ws.ws_col > MAX_WIDTH ? MAX_WIDTH : ws.ws_col;
}
-static void parse_events_print_error(struct parse_events_error *err,
- const char *event)
+void parse_events_print_error(struct parse_events_error *err,
+ const char *event)
{
const char *str = "invalid or unsupported event: ";
char _buf[MAX_WIDTH];
@@ -1781,8 +1787,6 @@ static void parse_events_print_error(struct parse_events_error *err,
zfree(&err->str);
zfree(&err->help);
}
-
- fprintf(stderr, "Run 'perf list' for a list of valid events\n");
}
#undef MAX_WIDTH
@@ -1794,8 +1798,10 @@ int parse_events_option(const struct option *opt, const char *str,
struct parse_events_error err = { .idx = 0, };
int ret = parse_events(evlist, str, &err);
- if (ret)
+ if (ret) {
parse_events_print_error(&err, str);
+ fprintf(stderr, "Run 'perf list' for a list of valid events\n");
+ }
return ret;
}
diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h
index 635135125111..3909ca0639f2 100644
--- a/tools/perf/util/parse-events.h
+++ b/tools/perf/util/parse-events.h
@@ -202,6 +202,9 @@ int is_valid_tracepoint(const char *event_string);
int valid_event_mount(const char *eventfs);
char *parse_events_formats_error_string(char *additional_terms);
+void parse_events_print_error(struct parse_events_error *err,
+ const char *event);
+
#ifdef HAVE_LIBELF_SUPPORT
/*
* If the probe point starts with '%',
--
2.9.5
^ permalink raw reply related [flat|nested] 5+ messages in thread* Re: [PATCH] perf, tools: Improve error messages for missing PMUs
2017-09-13 21:50 Andi Kleen
@ 2017-09-15 18:45 ` Jiri Olsa
2017-09-15 19:00 ` Arnaldo Carvalho de Melo
0 siblings, 1 reply; 5+ messages in thread
From: Jiri Olsa @ 2017-09-15 18:45 UTC (permalink / raw)
To: Andi Kleen; +Cc: acme, linux-kernel, jolsa, Andi Kleen
On Wed, Sep 13, 2017 at 02:50:06PM -0700, Andi Kleen wrote:
> From: Andi Kleen <ak@linux.intel.com>
>
> When a PMU is missing print a better error message mentioning
> the missing PMU.
>
> % mkdir empty
> % mount --bind empty /sys/devices/msr
> % perf stat -M Summary true
> event syntax error: '{inst_retired.any,cycles}:W,{cpu_clk_unhalted.thread}:W,{inst_retired.any}:W,{cpu_clk_unhalted.ref_tsc,msr/tsc/}:W,{fp_comp_ops_exe.sse_scalar..'
> \___ Cannot find PMU `msr'. Missing kernel support?
>
> It still cannot find the right column for aliases, but it's already a vast improvement.
>
> v2: Check asprintf
> Signed-off-by: Andi Kleen <ak@linux.intel.com>
> ---
> tools/perf/util/metricgroup.c | 2 +-
> tools/perf/util/parse-events.c | 18 ++++++++++++------
> tools/perf/util/parse-events.h | 3 +++
> 3 files changed, 16 insertions(+), 7 deletions(-)
>
> diff --git a/tools/perf/util/metricgroup.c b/tools/perf/util/metricgroup.c
> index 2d60114f1870..0794f02cbb8f 100644
> --- a/tools/perf/util/metricgroup.c
> +++ b/tools/perf/util/metricgroup.c
> @@ -477,7 +477,7 @@ int metricgroup__parse_groups(const struct option *opt,
> memset(&parse_error, 0, sizeof(struct parse_events_error));
> ret = parse_events(perf_evlist, extra_events.buf, &parse_error);
> if (ret) {
> - pr_err("Cannot set up events %s\n", extra_events.buf);
> + parse_events_print_error(&parse_error, extra_events.buf);
nit, mixed tabs/spaces indent, other than that:
Acked-by: Jiri Olsa <jolsa@kernel.org>
thanks,
jirka
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [PATCH] perf, tools: Improve error messages for missing PMUs
2017-09-15 18:45 ` Jiri Olsa
@ 2017-09-15 19:00 ` Arnaldo Carvalho de Melo
0 siblings, 0 replies; 5+ messages in thread
From: Arnaldo Carvalho de Melo @ 2017-09-15 19:00 UTC (permalink / raw)
To: Jiri Olsa; +Cc: Andi Kleen, linux-kernel, jolsa, Andi Kleen
Em Fri, Sep 15, 2017 at 08:45:10PM +0200, Jiri Olsa escreveu:
> On Wed, Sep 13, 2017 at 02:50:06PM -0700, Andi Kleen wrote:
> > +++ b/tools/perf/util/metricgroup.c
> > @@ -477,7 +477,7 @@ int metricgroup__parse_groups(const struct option *opt,
> > memset(&parse_error, 0, sizeof(struct parse_events_error));
> > ret = parse_events(perf_evlist, extra_events.buf, &parse_error);
> > if (ret) {
> > - pr_err("Cannot set up events %s\n", extra_events.buf);
> > + parse_events_print_error(&parse_error, extra_events.buf);
>
> nit, mixed tabs/spaces indent, other than that:
Fixed that.
> Acked-by: Jiri Olsa <jolsa@kernel.org>
Thanks, applied.
- Arnaldo
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2017-09-15 19:00 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-09-12 0:26 [PATCH] perf, tools: Improve error messages for missing PMUs Andi Kleen
2017-09-13 13:34 ` Arnaldo Carvalho de Melo
-- strict thread matches above, loose matches on Subject: below --
2017-09-13 21:50 Andi Kleen
2017-09-15 18:45 ` Jiri Olsa
2017-09-15 19:00 ` Arnaldo Carvalho de Melo
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.