* [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; 6+ 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] 6+ messages in thread
* Re: [PATCH] perf, tools: Improve error messages for missing PMUs
2017-09-12 0:26 [PATCH] perf, tools: " Andi Kleen
@ 2017-09-13 13:34 ` Arnaldo Carvalho de Melo
0 siblings, 0 replies; 6+ 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] 6+ 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
2017-09-22 16:43 ` [tip:perf/core] perf pmu: " tip-bot for Andi Kleen
0 siblings, 2 replies; 6+ 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] 6+ messages in thread
* Re: [PATCH] perf, tools: Improve error messages for missing PMUs
2017-09-13 21:50 [PATCH] perf, tools: Improve error messages for missing PMUs Andi Kleen
@ 2017-09-15 18:45 ` Jiri Olsa
2017-09-15 19:00 ` Arnaldo Carvalho de Melo
2017-09-22 16:43 ` [tip:perf/core] perf pmu: " tip-bot for Andi Kleen
1 sibling, 1 reply; 6+ 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] 6+ 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; 6+ 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] 6+ messages in thread
* [tip:perf/core] perf pmu: Improve error messages for missing PMUs
2017-09-13 21:50 [PATCH] perf, tools: Improve error messages for missing PMUs Andi Kleen
2017-09-15 18:45 ` Jiri Olsa
@ 2017-09-22 16:43 ` tip-bot for Andi Kleen
1 sibling, 0 replies; 6+ messages in thread
From: tip-bot for Andi Kleen @ 2017-09-22 16:43 UTC (permalink / raw)
To: linux-tip-commits; +Cc: acme, ak, linux-kernel, hpa, tglx, jolsa, mingo
Commit-ID: 333b566559019b146905c623bde7f455c1d5add3
Gitweb: http://git.kernel.org/tip/333b566559019b146905c623bde7f455c1d5add3
Author: Andi Kleen <ak@linux.intel.com>
AuthorDate: Wed, 13 Sep 2017 14:50:06 -0700
Committer: Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Mon, 18 Sep 2017 09:40:20 -0300
perf pmu: Improve error messages for missing PMUs
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>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Link: http://lkml.kernel.org/r/20170913215006.32222-1-andi@firstfloor.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.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 2d60114..fa37ef7 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 7558892..9183913 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,
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,
@@ -1733,8 +1739,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];
@@ -1789,8 +1795,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
@@ -1802,8 +1806,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 6351351..3909ca0 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 '%',
^ permalink raw reply related [flat|nested] 6+ messages in thread
end of thread, other threads:[~2017-09-22 16:45 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-09-13 21:50 [PATCH] perf, tools: Improve error messages for missing PMUs Andi Kleen
2017-09-15 18:45 ` Jiri Olsa
2017-09-15 19:00 ` Arnaldo Carvalho de Melo
2017-09-22 16:43 ` [tip:perf/core] perf pmu: " tip-bot for Andi Kleen
-- strict thread matches above, loose matches on Subject: below --
2017-09-12 0:26 [PATCH] perf, tools: " Andi Kleen
2017-09-13 13:34 ` 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.