* [PATCH 0/2] perf tests: Fix Track with sched_switch test for hybrid case
@ 2022-07-12 11:28 Adrian Hunter
2022-07-12 11:28 ` [PATCH 1/2] perf parse-events: Fix segfault when event parser gets an error Adrian Hunter
2022-07-12 11:28 ` [PATCH 2/2] perf tests: Fix Track with sched_switch test for hybrid case Adrian Hunter
0 siblings, 2 replies; 5+ messages in thread
From: Adrian Hunter @ 2022-07-12 11:28 UTC (permalink / raw)
To: Arnaldo Carvalho de Melo
Cc: Jiri Olsa, Namhyung Kim, Ian Rogers, linux-kernel
Hi
Here are a couple of fixes related to the Track with sched_switch test.
Adrian Hunter (2):
perf parse-events: Fix segfault when event parser gets an error
perf tests: Fix Track with sched_switch test for hybrid case
tools/perf/tests/switch-tracking.c | 18 +++++++++++++-----
tools/perf/util/parse-events.c | 14 +++++++++++---
2 files changed, 24 insertions(+), 8 deletions(-)
Regards
Adrian
^ permalink raw reply [flat|nested] 5+ messages in thread* [PATCH 1/2] perf parse-events: Fix segfault when event parser gets an error 2022-07-12 11:28 [PATCH 0/2] perf tests: Fix Track with sched_switch test for hybrid case Adrian Hunter @ 2022-07-12 11:28 ` Adrian Hunter 2022-07-19 1:10 ` Ian Rogers 2022-07-12 11:28 ` [PATCH 2/2] perf tests: Fix Track with sched_switch test for hybrid case Adrian Hunter 1 sibling, 1 reply; 5+ messages in thread From: Adrian Hunter @ 2022-07-12 11:28 UTC (permalink / raw) To: Arnaldo Carvalho de Melo Cc: Jiri Olsa, Namhyung Kim, Ian Rogers, linux-kernel parse_events() is often called with parse_events_error set to NULL. Make parse_events_error__handle() not segfault in that case. Fixes: 43eb05d06679 ("perf tests: Support 'Track with sched_switch' test for hybrid") Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> --- tools/perf/util/parse-events.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c index 7ed235740431..700c95eafd62 100644 --- a/tools/perf/util/parse-events.c +++ b/tools/perf/util/parse-events.c @@ -2391,9 +2391,12 @@ void parse_events_error__exit(struct parse_events_error *err) void parse_events_error__handle(struct parse_events_error *err, int idx, char *str, char *help) { - if (WARN(!str, "WARNING: failed to provide error string\n")) { - free(help); - return; + if (WARN(!str, "WARNING: failed to provide error string\n")) + goto out_free; + if (!err) { + /* Assume caller does not want message printed */ + pr_debug("event syntax error: %s\n", str); + goto out_free; } switch (err->num_errors) { case 0: @@ -2419,6 +2422,11 @@ void parse_events_error__handle(struct parse_events_error *err, int idx, break; } err->num_errors++; + return; + +out_free: + free(str); + free(help); } #define MAX_WIDTH 1000 -- 2.25.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 1/2] perf parse-events: Fix segfault when event parser gets an error 2022-07-12 11:28 ` [PATCH 1/2] perf parse-events: Fix segfault when event parser gets an error Adrian Hunter @ 2022-07-19 1:10 ` Ian Rogers 2022-07-19 10:45 ` Adrian Hunter 0 siblings, 1 reply; 5+ messages in thread From: Ian Rogers @ 2022-07-19 1:10 UTC (permalink / raw) To: Adrian Hunter Cc: Arnaldo Carvalho de Melo, Jiri Olsa, Namhyung Kim, linux-kernel On Tue, Jul 12, 2022 at 4:28 AM Adrian Hunter <adrian.hunter@intel.com> wrote: > > parse_events() is often called with parse_events_error set to NULL. > Make parse_events_error__handle() not segfault in that case. > > Fixes: 43eb05d06679 ("perf tests: Support 'Track with sched_switch' test for hybrid") > Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> > --- > tools/perf/util/parse-events.c | 14 +++++++++++--- > 1 file changed, 11 insertions(+), 3 deletions(-) > > diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c > index 7ed235740431..700c95eafd62 100644 > --- a/tools/perf/util/parse-events.c > +++ b/tools/perf/util/parse-events.c > @@ -2391,9 +2391,12 @@ void parse_events_error__exit(struct parse_events_error *err) > void parse_events_error__handle(struct parse_events_error *err, int idx, > char *str, char *help) > { > - if (WARN(!str, "WARNING: failed to provide error string\n")) { > - free(help); > - return; > + if (WARN(!str, "WARNING: failed to provide error string\n")) > + goto out_free; > + if (!err) { > + /* Assume caller does not want message printed */ > + pr_debug("event syntax error: %s\n", str); > + goto out_free; It feels like a simpler invariant (as done elsewhere) to have the caller always pass err and then in the caller to call parse_events_error__exit. Any reason for behavior change? Thanks, Ian > } > switch (err->num_errors) { > case 0: > @@ -2419,6 +2422,11 @@ void parse_events_error__handle(struct parse_events_error *err, int idx, > break; > } > err->num_errors++; > + return; > + > +out_free: > + free(str); > + free(help); > } > > #define MAX_WIDTH 1000 > -- > 2.25.1 > ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 1/2] perf parse-events: Fix segfault when event parser gets an error 2022-07-19 1:10 ` Ian Rogers @ 2022-07-19 10:45 ` Adrian Hunter 0 siblings, 0 replies; 5+ messages in thread From: Adrian Hunter @ 2022-07-19 10:45 UTC (permalink / raw) To: Ian Rogers Cc: Arnaldo Carvalho de Melo, Jiri Olsa, Namhyung Kim, linux-kernel On 19/07/22 04:10, Ian Rogers wrote: > On Tue, Jul 12, 2022 at 4:28 AM Adrian Hunter <adrian.hunter@intel.com> wrote: >> >> parse_events() is often called with parse_events_error set to NULL. >> Make parse_events_error__handle() not segfault in that case. >> >> Fixes: 43eb05d06679 ("perf tests: Support 'Track with sched_switch' test for hybrid") >> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> >> --- >> tools/perf/util/parse-events.c | 14 +++++++++++--- >> 1 file changed, 11 insertions(+), 3 deletions(-) >> >> diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c >> index 7ed235740431..700c95eafd62 100644 >> --- a/tools/perf/util/parse-events.c >> +++ b/tools/perf/util/parse-events.c >> @@ -2391,9 +2391,12 @@ void parse_events_error__exit(struct parse_events_error *err) >> void parse_events_error__handle(struct parse_events_error *err, int idx, >> char *str, char *help) >> { >> - if (WARN(!str, "WARNING: failed to provide error string\n")) { >> - free(help); >> - return; >> + if (WARN(!str, "WARNING: failed to provide error string\n")) >> + goto out_free; >> + if (!err) { >> + /* Assume caller does not want message printed */ >> + pr_debug("event syntax error: %s\n", str); >> + goto out_free; > > > It feels like a simpler invariant (as done elsewhere) to have the > caller always pass err and then in the caller to call > parse_events_error__exit. Any reason for behavior change? This is a bug fix. More complicated changes can be done separately, if desired, but it is wrong to segfault here in any case. > > Thanks, > Ian > >> } >> switch (err->num_errors) { >> case 0: >> @@ -2419,6 +2422,11 @@ void parse_events_error__handle(struct parse_events_error *err, int idx, >> break; >> } >> err->num_errors++; >> + return; >> + >> +out_free: >> + free(str); >> + free(help); >> } >> >> #define MAX_WIDTH 1000 >> -- >> 2.25.1 >> ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 2/2] perf tests: Fix Track with sched_switch test for hybrid case 2022-07-12 11:28 [PATCH 0/2] perf tests: Fix Track with sched_switch test for hybrid case Adrian Hunter 2022-07-12 11:28 ` [PATCH 1/2] perf parse-events: Fix segfault when event parser gets an error Adrian Hunter @ 2022-07-12 11:28 ` Adrian Hunter 1 sibling, 0 replies; 5+ messages in thread From: Adrian Hunter @ 2022-07-12 11:28 UTC (permalink / raw) To: Arnaldo Carvalho de Melo Cc: Jiri Olsa, Namhyung Kim, Ian Rogers, linux-kernel If cpu_core PMU event fails to parse, try also cpu_atom PMU event when parsing cycles event. Fixes: 43eb05d06679 ("perf tests: Support 'Track with sched_switch' test for hybrid") Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> --- tools/perf/tests/switch-tracking.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/tools/perf/tests/switch-tracking.c b/tools/perf/tests/switch-tracking.c index 0c0c2328bf4e..6f53bee33f7c 100644 --- a/tools/perf/tests/switch-tracking.c +++ b/tools/perf/tests/switch-tracking.c @@ -324,6 +324,7 @@ static int process_events(struct evlist *evlist, static int test__switch_tracking(struct test_suite *test __maybe_unused, int subtest __maybe_unused) { const char *sched_switch = "sched:sched_switch"; + const char *cycles = "cycles:u"; struct switch_tracking switch_tracking = { .tids = NULL, }; struct record_opts opts = { .mmap_pages = UINT_MAX, @@ -372,12 +373,19 @@ static int test__switch_tracking(struct test_suite *test __maybe_unused, int sub cpu_clocks_evsel = evlist__last(evlist); /* Second event */ - if (perf_pmu__has_hybrid()) - err = parse_events(evlist, "cpu_core/cycles/u", NULL); - else - err = parse_events(evlist, "cycles:u", NULL); + if (perf_pmu__has_hybrid()) { + cycles = "cpu_core/cycles/u"; + err = parse_events(evlist, cycles, NULL); + if (err) { + cycles = "cpu_atom/cycles/u"; + pr_debug("Trying %s\n", cycles); + err = parse_events(evlist, cycles, NULL); + } + } else { + err = parse_events(evlist, cycles, NULL); + } if (err) { - pr_debug("Failed to parse event cycles:u\n"); + pr_debug("Failed to parse event %s\n", cycles); goto out_err; } -- 2.25.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2022-07-19 10:46 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2022-07-12 11:28 [PATCH 0/2] perf tests: Fix Track with sched_switch test for hybrid case Adrian Hunter 2022-07-12 11:28 ` [PATCH 1/2] perf parse-events: Fix segfault when event parser gets an error Adrian Hunter 2022-07-19 1:10 ` Ian Rogers 2022-07-19 10:45 ` Adrian Hunter 2022-07-12 11:28 ` [PATCH 2/2] perf tests: Fix Track with sched_switch test for hybrid case Adrian Hunter
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox