* [PATCH v1 1/4] perf stat: Fix affinity memory leaks on error path
@ 2024-09-24 20:29 Ian Rogers
2024-09-24 20:29 ` [PATCH v1 2/4] perf test: Fix memory leaks on event-times error paths Ian Rogers
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Ian Rogers @ 2024-09-24 20:29 UTC (permalink / raw)
To: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Namhyung Kim, Mark Rutland, Alexander Shishkin, Jiri Olsa,
Ian Rogers, Adrian Hunter, Kan Liang, linux-perf-users,
linux-kernel
Missed cleanup when an error occurs.
Fixes: 49de179577e7 ("perf stat: No need to setup affinities when starting a workload")
Signed-off-by: Ian Rogers <irogers@google.com>
---
tools/perf/builtin-stat.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
index 689a3d43c258..cc55df3ccb18 100644
--- a/tools/perf/builtin-stat.c
+++ b/tools/perf/builtin-stat.c
@@ -767,6 +767,7 @@ static int __run_perf_stat(int argc, const char **argv, int run_idx)
switch (stat_handle_error(counter)) {
case COUNTER_FATAL:
+ affinity__cleanup(affinity);
return -1;
case COUNTER_RETRY:
goto try_again;
@@ -808,6 +809,7 @@ static int __run_perf_stat(int argc, const char **argv, int run_idx)
switch (stat_handle_error(counter)) {
case COUNTER_FATAL:
+ affinity__cleanup(affinity);
return -1;
case COUNTER_RETRY:
goto try_again_reset;
--
2.46.0.792.g87dc391469-goog
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v1 2/4] perf test: Fix memory leaks on event-times error paths
2024-09-24 20:29 [PATCH v1 1/4] perf stat: Fix affinity memory leaks on error path Ian Rogers
@ 2024-09-24 20:29 ` Ian Rogers
2024-09-24 20:29 ` [PATCH v1 3/4] perf test: Skip not fail tp fields test when insufficient permissions Ian Rogers
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Ian Rogers @ 2024-09-24 20:29 UTC (permalink / raw)
To: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Namhyung Kim, Mark Rutland, Alexander Shishkin, Jiri Olsa,
Ian Rogers, Adrian Hunter, Kan Liang, linux-perf-users,
linux-kernel
These error paths occur without sufficient permissions. Fix the memory
leaks to make leak sanitizer happier.
Signed-off-by: Ian Rogers <irogers@google.com>
---
tools/perf/tests/event-times.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/tools/perf/tests/event-times.c b/tools/perf/tests/event-times.c
index e155f0e0e04d..deefe5003bfc 100644
--- a/tools/perf/tests/event-times.c
+++ b/tools/perf/tests/event-times.c
@@ -126,6 +126,7 @@ static int attach__cpu_disabled(struct evlist *evlist)
evsel->core.attr.disabled = 1;
err = evsel__open_per_cpu(evsel, cpus, -1);
+ perf_cpu_map__put(cpus);
if (err) {
if (err == -EACCES)
return TEST_SKIP;
@@ -134,7 +135,6 @@ static int attach__cpu_disabled(struct evlist *evlist)
return err;
}
- perf_cpu_map__put(cpus);
return evsel__enable(evsel);
}
@@ -153,10 +153,10 @@ static int attach__cpu_enabled(struct evlist *evlist)
}
err = evsel__open_per_cpu(evsel, cpus, -1);
+ perf_cpu_map__put(cpus);
if (err == -EACCES)
return TEST_SKIP;
- perf_cpu_map__put(cpus);
return err ? TEST_FAIL : TEST_OK;
}
@@ -188,6 +188,7 @@ static int test_times(int (attach)(struct evlist *),
err = attach(evlist);
if (err == TEST_SKIP) {
pr_debug(" SKIP : not enough rights\n");
+ evlist__delete(evlist);
return err;
}
--
2.46.0.792.g87dc391469-goog
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v1 3/4] perf test: Skip not fail tp fields test when insufficient permissions
2024-09-24 20:29 [PATCH v1 1/4] perf stat: Fix affinity memory leaks on error path Ian Rogers
2024-09-24 20:29 ` [PATCH v1 2/4] perf test: Fix memory leaks on event-times error paths Ian Rogers
@ 2024-09-24 20:29 ` Ian Rogers
2024-09-24 20:29 ` [PATCH v1 4/4] perf test: Skip not fail syscall " Ian Rogers
2024-09-30 21:03 ` [PATCH v1 1/4] perf stat: Fix affinity memory leaks on error path Namhyung Kim
3 siblings, 0 replies; 5+ messages in thread
From: Ian Rogers @ 2024-09-24 20:29 UTC (permalink / raw)
To: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Namhyung Kim, Mark Rutland, Alexander Shishkin, Jiri Olsa,
Ian Rogers, Adrian Hunter, Kan Liang, linux-perf-users,
linux-kernel
Clean up return value to be TEST_* rather than unspecific integer. Add
test case skip reason. Skip test if EACCES comes back from
evsel__newtp.
Signed-off-by: Ian Rogers <irogers@google.com>
---
tools/perf/tests/evsel-tp-sched.c | 40 +++++++++++++++++++------------
1 file changed, 25 insertions(+), 15 deletions(-)
diff --git a/tools/perf/tests/evsel-tp-sched.c b/tools/perf/tests/evsel-tp-sched.c
index cf4da3d748c2..3da6a76eac38 100644
--- a/tools/perf/tests/evsel-tp-sched.c
+++ b/tools/perf/tests/evsel-tp-sched.c
@@ -36,33 +36,33 @@ static int test__perf_evsel__tp_sched_test(struct test_suite *test __maybe_unuse
int subtest __maybe_unused)
{
struct evsel *evsel = evsel__newtp("sched", "sched_switch");
- int ret = 0;
+ int ret = TEST_OK;
if (IS_ERR(evsel)) {
pr_debug("evsel__newtp failed with %ld\n", PTR_ERR(evsel));
- return -1;
+ return PTR_ERR(evsel) == -EACCES ? TEST_SKIP : TEST_FAIL;
}
if (evsel__test_field(evsel, "prev_comm", 16, false))
- ret = -1;
+ ret = TEST_FAIL;
if (evsel__test_field(evsel, "prev_pid", 4, true))
- ret = -1;
+ ret = TEST_FAIL;
if (evsel__test_field(evsel, "prev_prio", 4, true))
- ret = -1;
+ ret = TEST_FAIL;
if (evsel__test_field(evsel, "prev_state", sizeof(long), true))
- ret = -1;
+ ret = TEST_FAIL;
if (evsel__test_field(evsel, "next_comm", 16, false))
- ret = -1;
+ ret = TEST_FAIL;
if (evsel__test_field(evsel, "next_pid", 4, true))
- ret = -1;
+ ret = TEST_FAIL;
if (evsel__test_field(evsel, "next_prio", 4, true))
- ret = -1;
+ ret = TEST_FAIL;
evsel__delete(evsel);
@@ -70,23 +70,33 @@ static int test__perf_evsel__tp_sched_test(struct test_suite *test __maybe_unuse
if (IS_ERR(evsel)) {
pr_debug("evsel__newtp failed with %ld\n", PTR_ERR(evsel));
- return -1;
+ return TEST_FAIL;
}
if (evsel__test_field(evsel, "comm", 16, false))
- ret = -1;
+ ret = TEST_FAIL;
if (evsel__test_field(evsel, "pid", 4, true))
- ret = -1;
+ ret = TEST_FAIL;
if (evsel__test_field(evsel, "prio", 4, true))
- ret = -1;
+ ret = TEST_FAIL;
if (evsel__test_field(evsel, "target_cpu", 4, true))
- ret = -1;
+ ret = TEST_FAIL;
evsel__delete(evsel);
return ret;
}
-DEFINE_SUITE("Parse sched tracepoints fields", perf_evsel__tp_sched_test);
+static struct test_case tests__perf_evsel__tp_sched_test[] = {
+ TEST_CASE_REASON("Parse sched tracepoints fields",
+ perf_evsel__tp_sched_test,
+ "permissions"),
+ { .name = NULL, }
+};
+
+struct test_suite suite__perf_evsel__tp_sched_test = {
+ .desc = "Parse sched tracepoints fields",
+ .test_cases = tests__perf_evsel__tp_sched_test,
+};
--
2.46.0.792.g87dc391469-goog
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v1 4/4] perf test: Skip not fail syscall tp fields test when insufficient permissions
2024-09-24 20:29 [PATCH v1 1/4] perf stat: Fix affinity memory leaks on error path Ian Rogers
2024-09-24 20:29 ` [PATCH v1 2/4] perf test: Fix memory leaks on event-times error paths Ian Rogers
2024-09-24 20:29 ` [PATCH v1 3/4] perf test: Skip not fail tp fields test when insufficient permissions Ian Rogers
@ 2024-09-24 20:29 ` Ian Rogers
2024-09-30 21:03 ` [PATCH v1 1/4] perf stat: Fix affinity memory leaks on error path Namhyung Kim
3 siblings, 0 replies; 5+ messages in thread
From: Ian Rogers @ 2024-09-24 20:29 UTC (permalink / raw)
To: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Namhyung Kim, Mark Rutland, Alexander Shishkin, Jiri Olsa,
Ian Rogers, Adrian Hunter, Kan Liang, linux-perf-users,
linux-kernel
Clean up return value to be TEST_* rather than unspecific integer. Add
test case skip reason. Skip test if EACCES comes back from
evsel__newtp.
Signed-off-by: Ian Rogers <irogers@google.com>
---
tools/perf/tests/openat-syscall-tp-fields.c | 19 +++++++++++++++----
1 file changed, 15 insertions(+), 4 deletions(-)
diff --git a/tools/perf/tests/openat-syscall-tp-fields.c b/tools/perf/tests/openat-syscall-tp-fields.c
index 888df8eca981..3943da441979 100644
--- a/tools/perf/tests/openat-syscall-tp-fields.c
+++ b/tools/perf/tests/openat-syscall-tp-fields.c
@@ -40,7 +40,7 @@ static int test__syscall_openat_tp_fields(struct test_suite *test __maybe_unused
int flags = O_RDONLY | O_DIRECTORY;
struct evlist *evlist = evlist__new();
struct evsel *evsel;
- int err = -1, i, nr_events = 0, nr_polls = 0;
+ int ret = TEST_FAIL, err, i, nr_events = 0, nr_polls = 0;
char sbuf[STRERR_BUFSIZE];
if (evlist == NULL) {
@@ -51,6 +51,7 @@ static int test__syscall_openat_tp_fields(struct test_suite *test __maybe_unused
evsel = evsel__newtp("syscalls", "sys_enter_openat");
if (IS_ERR(evsel)) {
pr_debug("%s: evsel__newtp\n", __func__);
+ ret = PTR_ERR(evsel) == -EACCES ? TEST_SKIP : TEST_FAIL;
goto out_delete_evlist;
}
@@ -138,11 +139,21 @@ static int test__syscall_openat_tp_fields(struct test_suite *test __maybe_unused
}
}
out_ok:
- err = 0;
+ ret = TEST_OK;
out_delete_evlist:
evlist__delete(evlist);
out:
- return err;
+ return ret;
}
-DEFINE_SUITE("syscalls:sys_enter_openat event fields", syscall_openat_tp_fields);
+static struct test_case tests__syscall_openat_tp_fields[] = {
+ TEST_CASE_REASON("syscalls:sys_enter_openat event fields",
+ syscall_openat_tp_fields,
+ "permissions"),
+ { .name = NULL, }
+};
+
+struct test_suite suite__syscall_openat_tp_fields = {
+ .desc = "syscalls:sys_enter_openat event fields",
+ .test_cases = tests__syscall_openat_tp_fields,
+};
--
2.46.0.792.g87dc391469-goog
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v1 1/4] perf stat: Fix affinity memory leaks on error path
2024-09-24 20:29 [PATCH v1 1/4] perf stat: Fix affinity memory leaks on error path Ian Rogers
` (2 preceding siblings ...)
2024-09-24 20:29 ` [PATCH v1 4/4] perf test: Skip not fail syscall " Ian Rogers
@ 2024-09-30 21:03 ` Namhyung Kim
3 siblings, 0 replies; 5+ messages in thread
From: Namhyung Kim @ 2024-09-30 21:03 UTC (permalink / raw)
To: Ian Rogers
Cc: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Mark Rutland, Alexander Shishkin, Jiri Olsa, Adrian Hunter,
Kan Liang, linux-perf-users, linux-kernel
On Tue, Sep 24, 2024 at 01:29:13PM -0700, Ian Rogers wrote:
> Missed cleanup when an error occurs.
I think there's one more place for this - after bpf_counter__load()
failed. You may add a new label to handle it together in the error
path.
Also it doesn't apply to the latest tree, please rebase!
Thanks,
Namhyung
>
> Fixes: 49de179577e7 ("perf stat: No need to setup affinities when starting a workload")
> Signed-off-by: Ian Rogers <irogers@google.com>
> ---
> tools/perf/builtin-stat.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
> index 689a3d43c258..cc55df3ccb18 100644
> --- a/tools/perf/builtin-stat.c
> +++ b/tools/perf/builtin-stat.c
> @@ -767,6 +767,7 @@ static int __run_perf_stat(int argc, const char **argv, int run_idx)
>
> switch (stat_handle_error(counter)) {
> case COUNTER_FATAL:
> + affinity__cleanup(affinity);
> return -1;
> case COUNTER_RETRY:
> goto try_again;
> @@ -808,6 +809,7 @@ static int __run_perf_stat(int argc, const char **argv, int run_idx)
>
> switch (stat_handle_error(counter)) {
> case COUNTER_FATAL:
> + affinity__cleanup(affinity);
> return -1;
> case COUNTER_RETRY:
> goto try_again_reset;
> --
> 2.46.0.792.g87dc391469-goog
>
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2024-09-30 21:03 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-09-24 20:29 [PATCH v1 1/4] perf stat: Fix affinity memory leaks on error path Ian Rogers
2024-09-24 20:29 ` [PATCH v1 2/4] perf test: Fix memory leaks on event-times error paths Ian Rogers
2024-09-24 20:29 ` [PATCH v1 3/4] perf test: Skip not fail tp fields test when insufficient permissions Ian Rogers
2024-09-24 20:29 ` [PATCH v1 4/4] perf test: Skip not fail syscall " Ian Rogers
2024-09-30 21:03 ` [PATCH v1 1/4] perf stat: Fix affinity memory leaks on error path Namhyung Kim
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox