perf evlist: Auto unmap on destructor

Removing further boilerplate after making sure perf_evlist__munmap can
be called multiple times for the same evlist.

Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-o0luenuld4abupm4nmrgzm6f@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent f26e1c7c
...@@ -968,8 +968,6 @@ int cmd_record(int argc, const char **argv, const char *prefix __maybe_unused) ...@@ -968,8 +968,6 @@ int cmd_record(int argc, const char **argv, const char *prefix __maybe_unused)
} }
err = __cmd_record(&record, argc, argv); err = __cmd_record(&record, argc, argv);
perf_evlist__munmap(rec->evlist);
out_symbol_exit: out_symbol_exit:
symbol__exit(); symbol__exit();
return err; return err;
......
...@@ -1993,7 +1993,6 @@ static int trace__run(struct trace *trace, int argc, const char **argv) ...@@ -1993,7 +1993,6 @@ static int trace__run(struct trace *trace, int argc, const char **argv)
} }
} }
perf_evlist__munmap(evlist);
out_delete_evlist: out_delete_evlist:
perf_evlist__delete(evlist); perf_evlist__delete(evlist);
out: out:
......
...@@ -540,7 +540,6 @@ static int do_test_code_reading(bool try_kcore) ...@@ -540,7 +540,6 @@ static int do_test_code_reading(bool try_kcore)
err = TEST_CODE_READING_OK; err = TEST_CODE_READING_OK;
out_err: out_err:
if (evlist) { if (evlist) {
perf_evlist__munmap(evlist);
perf_evlist__delete(evlist); perf_evlist__delete(evlist);
} else { } else {
cpu_map__delete(cpus); cpu_map__delete(cpus);
......
...@@ -142,7 +142,6 @@ int test__keep_tracking(void) ...@@ -142,7 +142,6 @@ int test__keep_tracking(void)
out_err: out_err:
if (evlist) { if (evlist) {
perf_evlist__disable(evlist); perf_evlist__disable(evlist);
perf_evlist__munmap(evlist);
perf_evlist__delete(evlist); perf_evlist__delete(evlist);
} else { } else {
cpu_map__delete(cpus); cpu_map__delete(cpus);
......
...@@ -105,13 +105,13 @@ int test__basic_mmap(void) ...@@ -105,13 +105,13 @@ int test__basic_mmap(void)
if (event->header.type != PERF_RECORD_SAMPLE) { if (event->header.type != PERF_RECORD_SAMPLE) {
pr_debug("unexpected %s event\n", pr_debug("unexpected %s event\n",
perf_event__name(event->header.type)); perf_event__name(event->header.type));
goto out_munmap; goto out_delete_evlist;
} }
err = perf_evlist__parse_sample(evlist, event, &sample); err = perf_evlist__parse_sample(evlist, event, &sample);
if (err) { if (err) {
pr_err("Can't parse sample, err = %d\n", err); pr_err("Can't parse sample, err = %d\n", err);
goto out_munmap; goto out_delete_evlist;
} }
err = -1; err = -1;
...@@ -119,7 +119,7 @@ int test__basic_mmap(void) ...@@ -119,7 +119,7 @@ int test__basic_mmap(void)
if (evsel == NULL) { if (evsel == NULL) {
pr_debug("event with id %" PRIu64 pr_debug("event with id %" PRIu64
" doesn't map to an evsel\n", sample.id); " doesn't map to an evsel\n", sample.id);
goto out_munmap; goto out_delete_evlist;
} }
nr_events[evsel->idx]++; nr_events[evsel->idx]++;
perf_evlist__mmap_consume(evlist, 0); perf_evlist__mmap_consume(evlist, 0);
...@@ -132,12 +132,10 @@ int test__basic_mmap(void) ...@@ -132,12 +132,10 @@ int test__basic_mmap(void)
expected_nr_events[evsel->idx], expected_nr_events[evsel->idx],
perf_evsel__name(evsel), nr_events[evsel->idx]); perf_evsel__name(evsel), nr_events[evsel->idx]);
err = -1; err = -1;
goto out_munmap; goto out_delete_evlist;
} }
} }
out_munmap:
perf_evlist__munmap(evlist);
out_delete_evlist: out_delete_evlist:
perf_evlist__delete(evlist); perf_evlist__delete(evlist);
cpus = NULL; cpus = NULL;
......
...@@ -85,7 +85,7 @@ int test__syscall_open_tp_fields(void) ...@@ -85,7 +85,7 @@ int test__syscall_open_tp_fields(void)
err = perf_evsel__parse_sample(evsel, event, &sample); err = perf_evsel__parse_sample(evsel, event, &sample);
if (err) { if (err) {
pr_err("Can't parse sample, err = %d\n", err); pr_err("Can't parse sample, err = %d\n", err);
goto out_munmap; goto out_delete_evlist;
} }
tp_flags = perf_evsel__intval(evsel, &sample, "flags"); tp_flags = perf_evsel__intval(evsel, &sample, "flags");
...@@ -93,7 +93,7 @@ int test__syscall_open_tp_fields(void) ...@@ -93,7 +93,7 @@ int test__syscall_open_tp_fields(void)
if (flags != tp_flags) { if (flags != tp_flags) {
pr_debug("%s: Expected flags=%#x, got %#x\n", pr_debug("%s: Expected flags=%#x, got %#x\n",
__func__, flags, tp_flags); __func__, flags, tp_flags);
goto out_munmap; goto out_delete_evlist;
} }
goto out_ok; goto out_ok;
...@@ -105,13 +105,11 @@ int test__syscall_open_tp_fields(void) ...@@ -105,13 +105,11 @@ int test__syscall_open_tp_fields(void)
if (++nr_polls > 5) { if (++nr_polls > 5) {
pr_debug("%s: no events!\n", __func__); pr_debug("%s: no events!\n", __func__);
goto out_munmap; goto out_delete_evlist;
} }
} }
out_ok: out_ok:
err = 0; err = 0;
out_munmap:
perf_evlist__munmap(evlist);
out_delete_evlist: out_delete_evlist:
perf_evlist__delete(evlist); perf_evlist__delete(evlist);
out: out:
......
...@@ -165,7 +165,7 @@ int test__PERF_RECORD(void) ...@@ -165,7 +165,7 @@ int test__PERF_RECORD(void)
if (verbose) if (verbose)
perf_event__fprintf(event, stderr); perf_event__fprintf(event, stderr);
pr_debug("Couldn't parse sample\n"); pr_debug("Couldn't parse sample\n");
goto out_err; goto out_delete_evlist;
} }
if (verbose) { if (verbose) {
...@@ -302,8 +302,6 @@ int test__PERF_RECORD(void) ...@@ -302,8 +302,6 @@ int test__PERF_RECORD(void)
pr_debug("PERF_RECORD_MMAP for %s missing!\n", "[vdso]"); pr_debug("PERF_RECORD_MMAP for %s missing!\n", "[vdso]");
++errs; ++errs;
} }
out_err:
perf_evlist__munmap(evlist);
out_delete_evlist: out_delete_evlist:
perf_evlist__delete(evlist); perf_evlist__delete(evlist);
out: out:
......
...@@ -166,7 +166,6 @@ int test__perf_time_to_tsc(void) ...@@ -166,7 +166,6 @@ int test__perf_time_to_tsc(void)
out_err: out_err:
if (evlist) { if (evlist) {
perf_evlist__disable(evlist); perf_evlist__disable(evlist);
perf_evlist__munmap(evlist);
perf_evlist__delete(evlist); perf_evlist__delete(evlist);
} }
......
...@@ -90,7 +90,7 @@ static int __test__sw_clock_freq(enum perf_sw_ids clock_id) ...@@ -90,7 +90,7 @@ static int __test__sw_clock_freq(enum perf_sw_ids clock_id)
err = perf_evlist__parse_sample(evlist, event, &sample); err = perf_evlist__parse_sample(evlist, event, &sample);
if (err < 0) { if (err < 0) {
pr_debug("Error during parse sample\n"); pr_debug("Error during parse sample\n");
goto out_unmap_evlist; goto out_delete_evlist;
} }
total_periods += sample.period; total_periods += sample.period;
...@@ -105,8 +105,6 @@ static int __test__sw_clock_freq(enum perf_sw_ids clock_id) ...@@ -105,8 +105,6 @@ static int __test__sw_clock_freq(enum perf_sw_ids clock_id)
err = -1; err = -1;
} }
out_unmap_evlist:
perf_evlist__munmap(evlist);
out_delete_evlist: out_delete_evlist:
perf_evlist__delete(evlist); perf_evlist__delete(evlist);
return err; return err;
......
...@@ -112,7 +112,6 @@ int test__task_exit(void) ...@@ -112,7 +112,6 @@ int test__task_exit(void)
err = -1; err = -1;
} }
perf_evlist__munmap(evlist);
out_delete_evlist: out_delete_evlist:
perf_evlist__delete(evlist); perf_evlist__delete(evlist);
return err; return err;
......
...@@ -107,6 +107,7 @@ void perf_evlist__exit(struct perf_evlist *evlist) ...@@ -107,6 +107,7 @@ void perf_evlist__exit(struct perf_evlist *evlist)
void perf_evlist__delete(struct perf_evlist *evlist) void perf_evlist__delete(struct perf_evlist *evlist)
{ {
perf_evlist__munmap(evlist);
perf_evlist__close(evlist); perf_evlist__close(evlist);
cpu_map__delete(evlist->cpus); cpu_map__delete(evlist->cpus);
thread_map__delete(evlist->threads); thread_map__delete(evlist->threads);
...@@ -587,6 +588,9 @@ void perf_evlist__munmap(struct perf_evlist *evlist) ...@@ -587,6 +588,9 @@ void perf_evlist__munmap(struct perf_evlist *evlist)
{ {
int i; int i;
if (evlist->mmap == NULL)
return;
for (i = 0; i < evlist->nr_mmaps; i++) for (i = 0; i < evlist->nr_mmaps; i++)
__perf_evlist__munmap(evlist, i); __perf_evlist__munmap(evlist, i);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment