linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <acme@infradead.org>
To: Ingo Molnar <mingo@kernel.org>
Cc: linux-kernel@vger.kernel.org,
	Arnaldo Carvalho de Melo <acme@redhat.com>,
	Adrian Hunter <adrian.hunter@intel.com>,
	David Ahern <dsahern@gmail.com>,
	Frederic Weisbecker <fweisbec@gmail.com>,
	Jiri Olsa <jolsa@redhat.com>, Mike Galbraith <efault@gmx.de>,
	Namhyung Kim <namhyung@kernel.org>,
	Paul Mackerras <paulus@samba.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Stephane Eranian <eranian@google.com>
Subject: [PATCH 07/38] perf evlist: Auto unmap on destructor
Date: Mon, 13 Jan 2014 17:47:08 -0300	[thread overview]
Message-ID: <1389646059-24881-8-git-send-email-acme@infradead.org> (raw)
In-Reply-To: <1389646059-24881-1-git-send-email-acme@infradead.org>

From: Arnaldo Carvalho de Melo <acme@redhat.com>

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>
---
 tools/perf/builtin-record.c               |  2 --
 tools/perf/builtin-trace.c                |  1 -
 tools/perf/tests/code-reading.c           |  1 -
 tools/perf/tests/keep-tracking.c          |  1 -
 tools/perf/tests/mmap-basic.c             | 10 ++++------
 tools/perf/tests/open-syscall-tp-fields.c |  8 +++-----
 tools/perf/tests/perf-record.c            |  4 +---
 tools/perf/tests/perf-time-to-tsc.c       |  1 -
 tools/perf/tests/sw-clock.c               |  4 +---
 tools/perf/tests/task-exit.c              |  1 -
 tools/perf/util/evlist.c                  |  4 ++++
 11 files changed, 13 insertions(+), 24 deletions(-)

diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
index b7f5e438276b..cb00b53c200f 100644
--- a/tools/perf/builtin-record.c
+++ b/tools/perf/builtin-record.c
@@ -968,8 +968,6 @@ int cmd_record(int argc, const char **argv, const char *prefix __maybe_unused)
 	}
 
 	err = __cmd_record(&record, argc, argv);
-
-	perf_evlist__munmap(rec->evlist);
 out_symbol_exit:
 	symbol__exit();
 	return err;
diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c
index aa8a5f46c361..399b4b91b456 100644
--- a/tools/perf/builtin-trace.c
+++ b/tools/perf/builtin-trace.c
@@ -1993,7 +1993,6 @@ out_disable:
 		}
 	}
 
-	perf_evlist__munmap(evlist);
 out_delete_evlist:
 	perf_evlist__delete(evlist);
 out:
diff --git a/tools/perf/tests/code-reading.c b/tools/perf/tests/code-reading.c
index 2c0ce723749f..653a8fe2db95 100644
--- a/tools/perf/tests/code-reading.c
+++ b/tools/perf/tests/code-reading.c
@@ -540,7 +540,6 @@ static int do_test_code_reading(bool try_kcore)
 		err = TEST_CODE_READING_OK;
 out_err:
 	if (evlist) {
-		perf_evlist__munmap(evlist);
 		perf_evlist__delete(evlist);
 	} else {
 		cpu_map__delete(cpus);
diff --git a/tools/perf/tests/keep-tracking.c b/tools/perf/tests/keep-tracking.c
index dd1c677510bd..497957f269d8 100644
--- a/tools/perf/tests/keep-tracking.c
+++ b/tools/perf/tests/keep-tracking.c
@@ -142,7 +142,6 @@ int test__keep_tracking(void)
 out_err:
 	if (evlist) {
 		perf_evlist__disable(evlist);
-		perf_evlist__munmap(evlist);
 		perf_evlist__delete(evlist);
 	} else {
 		cpu_map__delete(cpus);
diff --git a/tools/perf/tests/mmap-basic.c b/tools/perf/tests/mmap-basic.c
index 111dd4a917ad..aef25f0ff9cc 100644
--- a/tools/perf/tests/mmap-basic.c
+++ b/tools/perf/tests/mmap-basic.c
@@ -105,13 +105,13 @@ int test__basic_mmap(void)
 		if (event->header.type != PERF_RECORD_SAMPLE) {
 			pr_debug("unexpected %s event\n",
 				 perf_event__name(event->header.type));
-			goto out_munmap;
+			goto out_delete_evlist;
 		}
 
 		err = perf_evlist__parse_sample(evlist, event, &sample);
 		if (err) {
 			pr_err("Can't parse sample, err = %d\n", err);
-			goto out_munmap;
+			goto out_delete_evlist;
 		}
 
 		err = -1;
@@ -119,7 +119,7 @@ int test__basic_mmap(void)
 		if (evsel == NULL) {
 			pr_debug("event with id %" PRIu64
 				 " doesn't map to an evsel\n", sample.id);
-			goto out_munmap;
+			goto out_delete_evlist;
 		}
 		nr_events[evsel->idx]++;
 		perf_evlist__mmap_consume(evlist, 0);
@@ -132,12 +132,10 @@ int test__basic_mmap(void)
 				 expected_nr_events[evsel->idx],
 				 perf_evsel__name(evsel), nr_events[evsel->idx]);
 			err = -1;
-			goto out_munmap;
+			goto out_delete_evlist;
 		}
 	}
 
-out_munmap:
-	perf_evlist__munmap(evlist);
 out_delete_evlist:
 	perf_evlist__delete(evlist);
 	cpus	= NULL;
diff --git a/tools/perf/tests/open-syscall-tp-fields.c b/tools/perf/tests/open-syscall-tp-fields.c
index 0a00638a9ebb..5a016f66f5d2 100644
--- a/tools/perf/tests/open-syscall-tp-fields.c
+++ b/tools/perf/tests/open-syscall-tp-fields.c
@@ -85,7 +85,7 @@ int test__syscall_open_tp_fields(void)
 				err = perf_evsel__parse_sample(evsel, event, &sample);
 				if (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");
@@ -93,7 +93,7 @@ int test__syscall_open_tp_fields(void)
 				if (flags != tp_flags) {
 					pr_debug("%s: Expected flags=%#x, got %#x\n",
 						 __func__, flags, tp_flags);
-					goto out_munmap;
+					goto out_delete_evlist;
 				}
 
 				goto out_ok;
@@ -105,13 +105,11 @@ int test__syscall_open_tp_fields(void)
 
 		if (++nr_polls > 5) {
 			pr_debug("%s: no events!\n", __func__);
-			goto out_munmap;
+			goto out_delete_evlist;
 		}
 	}
 out_ok:
 	err = 0;
-out_munmap:
-	perf_evlist__munmap(evlist);
 out_delete_evlist:
 	perf_evlist__delete(evlist);
 out:
diff --git a/tools/perf/tests/perf-record.c b/tools/perf/tests/perf-record.c
index 682978e66efe..39cc7c3c0d0c 100644
--- a/tools/perf/tests/perf-record.c
+++ b/tools/perf/tests/perf-record.c
@@ -165,7 +165,7 @@ int test__PERF_RECORD(void)
 					if (verbose)
 						perf_event__fprintf(event, stderr);
 					pr_debug("Couldn't parse sample\n");
-					goto out_err;
+					goto out_delete_evlist;
 				}
 
 				if (verbose) {
@@ -302,8 +302,6 @@ found_exit:
 		pr_debug("PERF_RECORD_MMAP for %s missing!\n", "[vdso]");
 		++errs;
 	}
-out_err:
-	perf_evlist__munmap(evlist);
 out_delete_evlist:
 	perf_evlist__delete(evlist);
 out:
diff --git a/tools/perf/tests/perf-time-to-tsc.c b/tools/perf/tests/perf-time-to-tsc.c
index 3d50f2d2a4d5..47146d388dbf 100644
--- a/tools/perf/tests/perf-time-to-tsc.c
+++ b/tools/perf/tests/perf-time-to-tsc.c
@@ -166,7 +166,6 @@ next_event:
 out_err:
 	if (evlist) {
 		perf_evlist__disable(evlist);
-		perf_evlist__munmap(evlist);
 		perf_evlist__delete(evlist);
 	}
 
diff --git a/tools/perf/tests/sw-clock.c b/tools/perf/tests/sw-clock.c
index b366f0edca79..983d6b8562a8 100644
--- a/tools/perf/tests/sw-clock.c
+++ b/tools/perf/tests/sw-clock.c
@@ -90,7 +90,7 @@ static int __test__sw_clock_freq(enum perf_sw_ids clock_id)
 		err = perf_evlist__parse_sample(evlist, event, &sample);
 		if (err < 0) {
 			pr_debug("Error during parse sample\n");
-			goto out_unmap_evlist;
+			goto out_delete_evlist;
 		}
 
 		total_periods += sample.period;
@@ -105,8 +105,6 @@ next_event:
 		err = -1;
 	}
 
-out_unmap_evlist:
-	perf_evlist__munmap(evlist);
 out_delete_evlist:
 	perf_evlist__delete(evlist);
 	return err;
diff --git a/tools/perf/tests/task-exit.c b/tools/perf/tests/task-exit.c
index 5511a0a929cd..5ff3db318f12 100644
--- a/tools/perf/tests/task-exit.c
+++ b/tools/perf/tests/task-exit.c
@@ -112,7 +112,6 @@ retry:
 		err = -1;
 	}
 
-	perf_evlist__munmap(evlist);
 out_delete_evlist:
 	perf_evlist__delete(evlist);
 	return err;
diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index a083bdc4680e..0810f5ca77d7 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -107,6 +107,7 @@ void perf_evlist__exit(struct perf_evlist *evlist)
 
 void perf_evlist__delete(struct perf_evlist *evlist)
 {
+	perf_evlist__munmap(evlist);
 	perf_evlist__close(evlist);
 	cpu_map__delete(evlist->cpus);
 	thread_map__delete(evlist->threads);
@@ -587,6 +588,9 @@ void perf_evlist__munmap(struct perf_evlist *evlist)
 {
 	int i;
 
+	if (evlist->mmap == NULL)
+		return;
+
 	for (i = 0; i < evlist->nr_mmaps; i++)
 		__perf_evlist__munmap(evlist, i);
 
-- 
1.8.1.4


  parent reply	other threads:[~2014-01-13 20:54 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-01-13 20:47 [GIT PULL 00/38] perf/core improvements and fixes Arnaldo Carvalho de Melo
2014-01-13 20:47 ` [PATCH 01/38] perf stat: Don't show counter information when workload fails Arnaldo Carvalho de Melo
2014-01-13 20:47 ` [PATCH 02/38] perf evlist: Send the errno in the signal " Arnaldo Carvalho de Melo
2014-01-13 20:47 ` [PATCH 03/38] perf evlist: Move the SIGUSR1 error reporting logic to prepare_workload Arnaldo Carvalho de Melo
2014-01-13 20:47 ` [PATCH 04/38] perf record: Remove old evsel_list usage Arnaldo Carvalho de Melo
2014-01-13 20:47 ` [PATCH 05/38] perf evlist: Move destruction of maps to evlist destructor Arnaldo Carvalho de Melo
2014-01-13 20:47 ` [PATCH 06/38] perf evlist: Close fds on destructor Arnaldo Carvalho de Melo
2014-01-13 20:47 ` Arnaldo Carvalho de Melo [this message]
2014-01-13 20:47 ` [PATCH 08/38] perf tests: Fixup leak on error path in parse events test Arnaldo Carvalho de Melo
2014-01-13 20:47 ` [PATCH 09/38] perf stat: Remove misplaced __maybe_unused Arnaldo Carvalho de Melo
2014-01-13 20:47 ` [PATCH 10/38] perf tools: Move arch setup into seprate Makefile Arnaldo Carvalho de Melo
2014-01-13 20:47 ` [PATCH 11/38] perf tests: Fix installation tests path setup Arnaldo Carvalho de Melo
2014-01-13 20:47 ` [PATCH 12/38] tools lib traceevent: Replace tabs with spaces for all non-commands statements Arnaldo Carvalho de Melo
2014-01-13 20:47 ` [PATCH 13/38] tools lib traceevent: Shut up plugins make message Arnaldo Carvalho de Melo
2014-01-13 20:47 ` [PATCH 14/38] perf header: Pack 'struct perf_session_env' Arnaldo Carvalho de Melo
2014-01-13 20:47 ` [PATCH 15/38] perf trace: Pack 'struct trace' Arnaldo Carvalho de Melo
2014-01-13 20:47 ` [PATCH 16/38] perf tools: Automate setup of FEATURE_CHECK_(C|LD)FLAGS-all variables Arnaldo Carvalho de Melo
2014-01-13 20:47 ` [PATCH 17/38] perf machine: Fix id_hdr_size initialization Arnaldo Carvalho de Melo
2014-01-13 20:47 ` [PATCH 18/38] perf tools: Make perf_event__synthesize_mmap_events global Arnaldo Carvalho de Melo
2014-01-13 20:47 ` [PATCH 19/38] perf stat: Fix --delay option in man page Arnaldo Carvalho de Melo
2014-01-13 20:47 ` [PATCH 20/38] tools perf: Comment typo fix Arnaldo Carvalho de Melo
2014-01-13 20:47 ` [PATCH 21/38] perf report: Move logic to warn about kptr_restrict'ed kernels to separate function Arnaldo Carvalho de Melo
2014-01-13 20:47 ` [PATCH 22/38] perf report: Move hist browser selection code " Arnaldo Carvalho de Melo
2014-01-13 20:47 ` [PATCH 23/38] perf report: Move histogram entries collapsing " Arnaldo Carvalho de Melo
2014-01-13 20:47 ` [PATCH 24/38] perf evlist: Introduce evlist__for_each() & friends Arnaldo Carvalho de Melo
2014-01-13 20:47 ` [PATCH 25/38] tools include: Move perf's linux/compiler.h to a generic place Arnaldo Carvalho de Melo
2014-01-13 20:47 ` [PATCH 26/38] tools include: Define likely/unlikely in linux/compiler.h Arnaldo Carvalho de Melo
2014-01-13 20:47 ` [PATCH 27/38] tools include: Move perf's bug.h to a generic place Arnaldo Carvalho de Melo
2014-01-13 20:47 ` [PATCH 28/38] perf tools: Include tools/lib/api/ in MANIFEST Arnaldo Carvalho de Melo
2014-01-13 20:47 ` [PATCH 29/38] perf tools: Add test for building detached source tarballs Arnaldo Carvalho de Melo
2014-01-13 20:47 ` [PATCH 30/38] perf tools: Use the DWARF unwind info only if loaded Arnaldo Carvalho de Melo
2014-01-13 20:47 ` [PATCH 31/38] perf record: Add --initial-delay option Arnaldo Carvalho de Melo
2014-01-13 20:47 ` [PATCH 32/38] tools include: Include <linux/compiler.h> from asm/bug.h Arnaldo Carvalho de Melo
2014-01-13 20:47 ` [PATCH 33/38] perf tools: Generalize percent_color_snprintf() Arnaldo Carvalho de Melo
2014-01-13 20:47 ` [PATCH 34/38] perf diff: Color the Delta column Arnaldo Carvalho de Melo
2014-01-13 20:47 ` [PATCH 35/38] perf diff: Color the Ratio column Arnaldo Carvalho de Melo
2014-01-13 20:47 ` [PATCH 36/38] perf diff: Color the Weighted Diff column Arnaldo Carvalho de Melo
2014-01-13 20:47 ` [PATCH 37/38] perf probe: Fix build when DWARF support libraries not present Arnaldo Carvalho de Melo
2014-01-13 20:47 ` [PATCH 38/38] perf tools: Remove unused test-volatile-register-var.c Arnaldo Carvalho de Melo
2014-01-14 13:41 ` [GIT PULL 00/38] perf/core improvements and fixes Ingo Molnar
2014-01-14 14:03   ` Arnaldo Carvalho de Melo
2014-01-14 16:24     ` Ingo Molnar

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1389646059-24881-8-git-send-email-acme@infradead.org \
    --to=acme@infradead.org \
    --cc=acme@redhat.com \
    --cc=adrian.hunter@intel.com \
    --cc=dsahern@gmail.com \
    --cc=efault@gmx.de \
    --cc=eranian@google.com \
    --cc=fweisbec@gmail.com \
    --cc=jolsa@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=namhyung@kernel.org \
    --cc=paulus@samba.org \
    --cc=peterz@infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).