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.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
f26e1c7cb2
commit
983874d173
@ -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 @@ out_disable:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
|
|
||||||
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)
|
|||||||
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 @@ found_exit:
|
|||||||
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 @@ next_event:
|
|||||||
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)
|
|||||||
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 @@ next_event:
|
|||||||
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 @@ retry:
|
|||||||
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)
|
|||||||
|
|
||||||
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)
|
|||||||
{
|
{
|
||||||
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);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user