linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH V3 00/14] perf tools: Fix gaps propagating maps
@ 2015-09-08  7:58 Adrian Hunter
  2015-09-08  7:58 ` [PATCH V3 01/14] perf tools: Simplify perf_evlist__propagate_maps logic Adrian Hunter
                   ` (14 more replies)
  0 siblings, 15 replies; 34+ messages in thread
From: Adrian Hunter @ 2015-09-08  7:58 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo; +Cc: Jiri Olsa, mingo, kan.liang, linux-kernel

Hi

Here is V3 of "Fix gaps propagating maps" that fixes some problems
revealed by to d988d5ee6478 ("perf evlist: Open event on evsel cpus and threads")

Changes in V3:

	perf tools: Remove redundant validation from perf_evlist__propagate_maps
		perf_evlist__set_maps also doesn't need to return an error anymore

	perf tools: Add evlist->has_user_cpus
		Adjusted due to perf_evlist__set_maps change

	perf tools: Make perf_evlist__create_maps() use perf_evlist__set_maps()
		Adjusted due to perf_evlist__set_maps change

	perf tools: Fix perf_evlist__create_syswide_maps() not propagating maps
		Adjusted due to perf_evlist__set_maps change

	perf tools: Fix task exit test setting maps
		Adjusted due to perf_evlist__set_maps change

	perf tools: Fix software clock events test setting maps
		Adjusted due to perf_evlist__set_maps change


Changes in V2:
	Split into multiple patches
	Add evsel->own_cpus to identify evsels with their own cpu map
	And consequently don't need to unpropagate

	perf tools: Fix perf_evlist__splice_list_tail not setting evlist
		New patch

	perf tools: Fix task exit test setting maps
		New patch

	perf tools: Fix software clock events test setting maps
		New patch


Adrian Hunter (14):
      perf tools: Simplify perf_evlist__propagate_maps logic
      perf tools: Simplify perf_evlist__set_maps logic
      perf tools: Remove redundant validation from perf_evlist__propagate_maps
      perf tools: Add evlist->has_user_cpus
      perf tools: Fix perf_evlist__splice_list_tail not setting evlist
      perf tools: Fix missing thread_map__put in perf_evlist__propagate_maps
      perf tools: Add evsel->own_cpus
      perf tools: Make perf_evlist__set_maps() more resilient
      perf tools: Make perf_evlist__create_maps() use perf_evlist__set_maps()
      perf tools: Factor out a function to propagate maps for a single evsel
      perf tools: Fix perf_evlist__add() not propagating maps
      perf tools: Fix perf_evlist__create_syswide_maps() not propagating maps
      perf tools: Fix task exit test setting maps
      perf tools: Fix software clock events test setting maps

 tools/perf/tests/sw-clock.c    |  18 ++++--
 tools/perf/tests/task-exit.c   |  18 ++++--
 tools/perf/util/evlist.c       | 138 +++++++++++++++++++++++------------------
 tools/perf/util/evlist.h       |   9 ++-
 tools/perf/util/evsel.c        |   1 +
 tools/perf/util/evsel.h        |   1 +
 tools/perf/util/parse-events.c |   7 +--
 7 files changed, 113 insertions(+), 79 deletions(-)


Regards
Adrian

^ permalink raw reply	[flat|nested] 34+ messages in thread

* [PATCH V3 01/14] perf tools: Simplify perf_evlist__propagate_maps logic
  2015-09-08  7:58 [PATCH V3 00/14] perf tools: Fix gaps propagating maps Adrian Hunter
@ 2015-09-08  7:58 ` Adrian Hunter
  2015-09-16  7:30   ` [tip:perf/core] perf evlist: Simplify propagate_maps() logic tip-bot for Adrian Hunter
  2015-09-08  7:58 ` [PATCH V3 02/14] perf tools: Simplify perf_evlist__set_maps logic Adrian Hunter
                   ` (13 subsequent siblings)
  14 siblings, 1 reply; 34+ messages in thread
From: Adrian Hunter @ 2015-09-08  7:58 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo; +Cc: Jiri Olsa, mingo, kan.liang, linux-kernel

If evsel->cpus is to be reassigned then the current value
must be "put", which works even if it is NULL.  Simplify
the current logic by moving the "put" next to the assignment.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
 tools/perf/util/evlist.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index d51a5200c8af..95e07ea3904c 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -1113,11 +1113,10 @@ static int perf_evlist__propagate_maps(struct perf_evlist *evlist,
 		 * We already have cpus for evsel (via PMU sysfs) so
 		 * keep it, if there's no target cpu list defined.
 		 */
-		if (evsel->cpus && has_user_cpus)
+		if (!evsel->cpus || has_user_cpus) {
 			cpu_map__put(evsel->cpus);
-
-		if (!evsel->cpus || has_user_cpus)
 			evsel->cpus = cpu_map__get(evlist->cpus);
+		}
 
 		evsel->threads = thread_map__get(evlist->threads);
 
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [PATCH V3 02/14] perf tools: Simplify perf_evlist__set_maps logic
  2015-09-08  7:58 [PATCH V3 00/14] perf tools: Fix gaps propagating maps Adrian Hunter
  2015-09-08  7:58 ` [PATCH V3 01/14] perf tools: Simplify perf_evlist__propagate_maps logic Adrian Hunter
@ 2015-09-08  7:58 ` Adrian Hunter
  2015-09-16  7:31   ` [tip:perf/core] perf evlist: Simplify set_maps() logic tip-bot for Adrian Hunter
  2015-09-08  7:58 ` [PATCH V3 03/14] perf tools: Remove redundant validation from perf_evlist__propagate_maps Adrian Hunter
                   ` (12 subsequent siblings)
  14 siblings, 1 reply; 34+ messages in thread
From: Adrian Hunter @ 2015-09-08  7:58 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo; +Cc: Jiri Olsa, mingo, kan.liang, linux-kernel

Don't need to check for NULL when "putting" evlist->maps and
evlist->threads because the "put" functions already do that.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
 tools/perf/util/evlist.c | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index 95e07ea3904c..9cb9296cc4f8 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -1156,14 +1156,10 @@ int perf_evlist__set_maps(struct perf_evlist *evlist,
 			  struct cpu_map *cpus,
 			  struct thread_map *threads)
 {
-	if (evlist->cpus)
-		cpu_map__put(evlist->cpus);
-
+	cpu_map__put(evlist->cpus);
 	evlist->cpus = cpus;
 
-	if (evlist->threads)
-		thread_map__put(evlist->threads);
-
+	thread_map__put(evlist->threads);
 	evlist->threads = threads;
 
 	return perf_evlist__propagate_maps(evlist, false);
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [PATCH V3 03/14] perf tools: Remove redundant validation from perf_evlist__propagate_maps
  2015-09-08  7:58 [PATCH V3 00/14] perf tools: Fix gaps propagating maps Adrian Hunter
  2015-09-08  7:58 ` [PATCH V3 01/14] perf tools: Simplify perf_evlist__propagate_maps logic Adrian Hunter
  2015-09-08  7:58 ` [PATCH V3 02/14] perf tools: Simplify perf_evlist__set_maps logic Adrian Hunter
@ 2015-09-08  7:58 ` Adrian Hunter
  2015-09-16  7:31   ` [tip:perf/core] perf evlist: Remove redundant validation from propagate_maps() tip-bot for Adrian Hunter
  2015-09-08  7:58 ` [PATCH V3 04/14] perf tools: Add evlist->has_user_cpus Adrian Hunter
                   ` (11 subsequent siblings)
  14 siblings, 1 reply; 34+ messages in thread
From: Adrian Hunter @ 2015-09-08  7:58 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo; +Cc: Jiri Olsa, mingo, kan.liang, linux-kernel

The validation checks that the values that were just assigned, got
assigned i.e. the error can't ever happen.  Subsequent patches will
call this code in places where errors are not being returned.
Changing those code paths to return this non-existent error is
counter-productive, so just remove it.

That in turn results in perf_evlist__set_maps not needing to return
an error, but callers aren't checking it either, so remove that too.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
 tools/perf/util/evlist.c | 21 ++++++++-------------
 tools/perf/util/evlist.h |  5 ++---
 2 files changed, 10 insertions(+), 16 deletions(-)

diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index 9cb9296cc4f8..785bfd392039 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -1103,8 +1103,8 @@ int perf_evlist__mmap(struct perf_evlist *evlist, unsigned int pages,
 	return perf_evlist__mmap_ex(evlist, pages, overwrite, 0, false);
 }
 
-static int perf_evlist__propagate_maps(struct perf_evlist *evlist,
-				       bool has_user_cpus)
+static void perf_evlist__propagate_maps(struct perf_evlist *evlist,
+					bool has_user_cpus)
 {
 	struct perf_evsel *evsel;
 
@@ -1119,13 +1119,7 @@ static int perf_evlist__propagate_maps(struct perf_evlist *evlist,
 		}
 
 		evsel->threads = thread_map__get(evlist->threads);
-
-		if ((evlist->cpus && !evsel->cpus) ||
-		    (evlist->threads && !evsel->threads))
-			return -ENOMEM;
 	}
-
-	return 0;
 }
 
 int perf_evlist__create_maps(struct perf_evlist *evlist, struct target *target)
@@ -1144,7 +1138,9 @@ int perf_evlist__create_maps(struct perf_evlist *evlist, struct target *target)
 	if (evlist->cpus == NULL)
 		goto out_delete_threads;
 
-	return perf_evlist__propagate_maps(evlist, !!target->cpu_list);
+	perf_evlist__propagate_maps(evlist, !!target->cpu_list);
+
+	return 0;
 
 out_delete_threads:
 	thread_map__put(evlist->threads);
@@ -1152,9 +1148,8 @@ out_delete_threads:
 	return -1;
 }
 
-int perf_evlist__set_maps(struct perf_evlist *evlist,
-			  struct cpu_map *cpus,
-			  struct thread_map *threads)
+void perf_evlist__set_maps(struct perf_evlist *evlist, struct cpu_map *cpus,
+			   struct thread_map *threads)
 {
 	cpu_map__put(evlist->cpus);
 	evlist->cpus = cpus;
@@ -1162,7 +1157,7 @@ int perf_evlist__set_maps(struct perf_evlist *evlist,
 	thread_map__put(evlist->threads);
 	evlist->threads = threads;
 
-	return perf_evlist__propagate_maps(evlist, false);
+	perf_evlist__propagate_maps(evlist, false);
 }
 
 int perf_evlist__apply_filters(struct perf_evlist *evlist, struct perf_evsel **err_evsel)
diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h
index b39a6198f4ac..da2fa9172bd6 100644
--- a/tools/perf/util/evlist.h
+++ b/tools/perf/util/evlist.h
@@ -155,9 +155,8 @@ int perf_evlist__enable_event_idx(struct perf_evlist *evlist,
 void perf_evlist__set_selected(struct perf_evlist *evlist,
 			       struct perf_evsel *evsel);
 
-int perf_evlist__set_maps(struct perf_evlist *evlist,
-			  struct cpu_map *cpus,
-			  struct thread_map *threads);
+void perf_evlist__set_maps(struct perf_evlist *evlist, struct cpu_map *cpus,
+			   struct thread_map *threads);
 int perf_evlist__create_maps(struct perf_evlist *evlist, struct target *target);
 int perf_evlist__apply_filters(struct perf_evlist *evlist, struct perf_evsel **err_evsel);
 
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [PATCH V3 04/14] perf tools: Add evlist->has_user_cpus
  2015-09-08  7:58 [PATCH V3 00/14] perf tools: Fix gaps propagating maps Adrian Hunter
                   ` (2 preceding siblings ...)
  2015-09-08  7:58 ` [PATCH V3 03/14] perf tools: Remove redundant validation from perf_evlist__propagate_maps Adrian Hunter
@ 2015-09-08  7:58 ` Adrian Hunter
  2015-09-16  7:32   ` [tip:perf/core] perf evlist: Add has_user_cpus member tip-bot for Adrian Hunter
  2015-09-08  7:58 ` [PATCH V3 05/14] perf tools: Fix perf_evlist__splice_list_tail not setting evlist Adrian Hunter
                   ` (10 subsequent siblings)
  14 siblings, 1 reply; 34+ messages in thread
From: Adrian Hunter @ 2015-09-08  7:58 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo; +Cc: Jiri Olsa, mingo, kan.liang, linux-kernel

Subsequent patches will need to call perf_evlist__propagate_maps
without reference to a "target".  Add evlist->has_user_cpus to
record whether the user has specified which cpus to target
(and therefore whether that list of cpus should override the
default settings for a selected event i.e. the cpu maps should
be propagated)

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
 tools/perf/util/evlist.c | 11 ++++++-----
 tools/perf/util/evlist.h |  1 +
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index 785bfd392039..3a4445f26a2c 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -1103,8 +1103,7 @@ int perf_evlist__mmap(struct perf_evlist *evlist, unsigned int pages,
 	return perf_evlist__mmap_ex(evlist, pages, overwrite, 0, false);
 }
 
-static void perf_evlist__propagate_maps(struct perf_evlist *evlist,
-					bool has_user_cpus)
+static void perf_evlist__propagate_maps(struct perf_evlist *evlist)
 {
 	struct perf_evsel *evsel;
 
@@ -1113,7 +1112,7 @@ static void perf_evlist__propagate_maps(struct perf_evlist *evlist,
 		 * We already have cpus for evsel (via PMU sysfs) so
 		 * keep it, if there's no target cpu list defined.
 		 */
-		if (!evsel->cpus || has_user_cpus) {
+		if (!evsel->cpus || evlist->has_user_cpus) {
 			cpu_map__put(evsel->cpus);
 			evsel->cpus = cpu_map__get(evlist->cpus);
 		}
@@ -1138,7 +1137,9 @@ int perf_evlist__create_maps(struct perf_evlist *evlist, struct target *target)
 	if (evlist->cpus == NULL)
 		goto out_delete_threads;
 
-	perf_evlist__propagate_maps(evlist, !!target->cpu_list);
+	evlist->has_user_cpus = !!target->cpu_list;
+
+	perf_evlist__propagate_maps(evlist);
 
 	return 0;
 
@@ -1157,7 +1158,7 @@ void perf_evlist__set_maps(struct perf_evlist *evlist, struct cpu_map *cpus,
 	thread_map__put(evlist->threads);
 	evlist->threads = threads;
 
-	perf_evlist__propagate_maps(evlist, false);
+	perf_evlist__propagate_maps(evlist);
 }
 
 int perf_evlist__apply_filters(struct perf_evlist *evlist, struct perf_evsel **err_evsel)
diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h
index da2fa9172bd6..cfc4df68a9db 100644
--- a/tools/perf/util/evlist.h
+++ b/tools/perf/util/evlist.h
@@ -42,6 +42,7 @@ struct perf_evlist {
 	int		 nr_mmaps;
 	bool		 overwrite;
 	bool		 enabled;
+	bool		 has_user_cpus;
 	size_t		 mmap_len;
 	int		 id_pos;
 	int		 is_pos;
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [PATCH V3 05/14] perf tools: Fix perf_evlist__splice_list_tail not setting evlist
  2015-09-08  7:58 [PATCH V3 00/14] perf tools: Fix gaps propagating maps Adrian Hunter
                   ` (3 preceding siblings ...)
  2015-09-08  7:58 ` [PATCH V3 04/14] perf tools: Add evlist->has_user_cpus Adrian Hunter
@ 2015-09-08  7:58 ` Adrian Hunter
  2015-09-16  7:32   ` [tip:perf/core] perf evlist: Fix splice_list_tail() " tip-bot for Adrian Hunter
  2015-09-08  7:58 ` [PATCH V3 06/14] perf tools: Fix missing thread_map__put in perf_evlist__propagate_maps Adrian Hunter
                   ` (9 subsequent siblings)
  14 siblings, 1 reply; 34+ messages in thread
From: Adrian Hunter @ 2015-09-08  7:58 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo; +Cc: Jiri Olsa, mingo, kan.liang, linux-kernel

Commit d49e46950772 ("perf evsel: Add a backpointer to the evlist
a evsel is in") updated perf_evlist__add() but not
perf_evlist__splice_list_tail().

This illustrates that it is better if perf_evlist__splice_list_tail()
calls perf_evlist__add() instead of duplicating the logic, so do that.
This will also simplify a subsequent fix for propagating maps.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
 tools/perf/util/evlist.c       | 15 +++++++--------
 tools/perf/util/evlist.h       |  3 +--
 tools/perf/util/parse-events.c |  3 +--
 3 files changed, 9 insertions(+), 12 deletions(-)

diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index 3a4445f26a2c..961560b2046b 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -136,15 +136,14 @@ void perf_evlist__add(struct perf_evlist *evlist, struct perf_evsel *entry)
 }
 
 void perf_evlist__splice_list_tail(struct perf_evlist *evlist,
-				   struct list_head *list,
-				   int nr_entries)
+				   struct list_head *list)
 {
-	bool set_id_pos = !evlist->nr_entries;
+	struct perf_evsel *evsel, *temp;
 
-	list_splice_tail(list, &evlist->entries);
-	evlist->nr_entries += nr_entries;
-	if (set_id_pos)
-		perf_evlist__set_id_pos(evlist);
+	__evlist__for_each_safe(list, temp, evsel) {
+		list_del_init(&evsel->node);
+		perf_evlist__add(evlist, evsel);
+	}
 }
 
 void __perf_evlist__set_leader(struct list_head *list)
@@ -210,7 +209,7 @@ static int perf_evlist__add_attrs(struct perf_evlist *evlist,
 		list_add_tail(&evsel->node, &head);
 	}
 
-	perf_evlist__splice_list_tail(evlist, &head, nr_attrs);
+	perf_evlist__splice_list_tail(evlist, &head);
 
 	return 0;
 
diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h
index cfc4df68a9db..115d8b53c601 100644
--- a/tools/perf/util/evlist.h
+++ b/tools/perf/util/evlist.h
@@ -179,8 +179,7 @@ bool perf_evlist__valid_sample_id_all(struct perf_evlist *evlist);
 bool perf_evlist__valid_read_format(struct perf_evlist *evlist);
 
 void perf_evlist__splice_list_tail(struct perf_evlist *evlist,
-				   struct list_head *list,
-				   int nr_entries);
+				   struct list_head *list);
 
 static inline struct perf_evsel *perf_evlist__first(struct perf_evlist *evlist)
 {
diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
index d826e6f515db..7e8ae21906e2 100644
--- a/tools/perf/util/parse-events.c
+++ b/tools/perf/util/parse-events.c
@@ -1140,10 +1140,9 @@ int parse_events(struct perf_evlist *evlist, const char *str,
 	ret = parse_events__scanner(str, &data, PE_START_EVENTS);
 	perf_pmu__parse_cleanup();
 	if (!ret) {
-		int entries = data.idx - evlist->nr_entries;
 		struct perf_evsel *last;
 
-		perf_evlist__splice_list_tail(evlist, &data.list, entries);
+		perf_evlist__splice_list_tail(evlist, &data.list);
 		evlist->nr_groups += data.nr_groups;
 		last = perf_evlist__last(evlist);
 		last->cmdline_group_boundary = true;
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [PATCH V3 06/14] perf tools: Fix missing thread_map__put in perf_evlist__propagate_maps
  2015-09-08  7:58 [PATCH V3 00/14] perf tools: Fix gaps propagating maps Adrian Hunter
                   ` (4 preceding siblings ...)
  2015-09-08  7:58 ` [PATCH V3 05/14] perf tools: Fix perf_evlist__splice_list_tail not setting evlist Adrian Hunter
@ 2015-09-08  7:58 ` Adrian Hunter
  2015-09-16  7:32   ` [tip:perf/core] perf evlist: Fix missing thread_map__put in propagate_maps() tip-bot for Adrian Hunter
  2015-09-08  7:58 ` [PATCH V3 07/14] perf tools: Add evsel->own_cpus Adrian Hunter
                   ` (8 subsequent siblings)
  14 siblings, 1 reply; 34+ messages in thread
From: Adrian Hunter @ 2015-09-08  7:58 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo; +Cc: Jiri Olsa, mingo, kan.liang, linux-kernel

perf_evlist__propagate_maps() incorrectly assumes evsel->threads
is NULL before reassigning it, but it won't be NULL when
perf_evlist__set_maps() is used to set different (or NULL) maps.
Thus thread_map__put must be used, which works even if
evsel->threads is NULL.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
 tools/perf/util/evlist.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index 961560b2046b..79056c6ae507 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -1116,6 +1116,7 @@ static void perf_evlist__propagate_maps(struct perf_evlist *evlist)
 			evsel->cpus = cpu_map__get(evlist->cpus);
 		}
 
+		thread_map__put(evsel->threads);
 		evsel->threads = thread_map__get(evlist->threads);
 	}
 }
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [PATCH V3 07/14] perf tools: Add evsel->own_cpus
  2015-09-08  7:58 [PATCH V3 00/14] perf tools: Fix gaps propagating maps Adrian Hunter
                   ` (5 preceding siblings ...)
  2015-09-08  7:58 ` [PATCH V3 06/14] perf tools: Fix missing thread_map__put in perf_evlist__propagate_maps Adrian Hunter
@ 2015-09-08  7:58 ` Adrian Hunter
  2015-09-16  7:33   ` [tip:perf/core] perf evsel: Add own_cpus member tip-bot for Adrian Hunter
  2015-09-08  7:58 ` [PATCH V3 08/14] perf tools: Make perf_evlist__set_maps() more resilient Adrian Hunter
                   ` (7 subsequent siblings)
  14 siblings, 1 reply; 34+ messages in thread
From: Adrian Hunter @ 2015-09-08  7:58 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo; +Cc: Jiri Olsa, mingo, kan.liang, linux-kernel

perf_evlist__propagate_maps() cannot easily tell if an evsel
has its own cpu map.  To make that simpler, keep a copy of
the PMU cpu map and adjust the propagation logic accordingly.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
 tools/perf/util/evlist.c       | 5 ++++-
 tools/perf/util/evsel.c        | 1 +
 tools/perf/util/evsel.h        | 1 +
 tools/perf/util/parse-events.c | 4 ++--
 4 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index 79056c6ae507..5bd3b49452c6 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -1111,9 +1111,12 @@ static void perf_evlist__propagate_maps(struct perf_evlist *evlist)
 		 * We already have cpus for evsel (via PMU sysfs) so
 		 * keep it, if there's no target cpu list defined.
 		 */
-		if (!evsel->cpus || evlist->has_user_cpus) {
+		if (!evsel->own_cpus || evlist->has_user_cpus) {
 			cpu_map__put(evsel->cpus);
 			evsel->cpus = cpu_map__get(evlist->cpus);
+		} else if (evsel->cpus != evsel->own_cpus) {
+			cpu_map__put(evsel->cpus);
+			evsel->cpus = cpu_map__get(evsel->own_cpus);
 		}
 
 		thread_map__put(evsel->threads);
diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
index c53f79123b37..5410483d5219 100644
--- a/tools/perf/util/evsel.c
+++ b/tools/perf/util/evsel.c
@@ -1033,6 +1033,7 @@ void perf_evsel__exit(struct perf_evsel *evsel)
 	perf_evsel__free_config_terms(evsel);
 	close_cgroup(evsel->cgrp);
 	cpu_map__put(evsel->cpus);
+	cpu_map__put(evsel->own_cpus);
 	thread_map__put(evsel->threads);
 	zfree(&evsel->group_name);
 	zfree(&evsel->name);
diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h
index 298e6bbca200..ef8925f7211a 100644
--- a/tools/perf/util/evsel.h
+++ b/tools/perf/util/evsel.h
@@ -98,6 +98,7 @@ struct perf_evsel {
 	struct cgroup_sel	*cgrp;
 	void			*handler;
 	struct cpu_map		*cpus;
+	struct cpu_map		*own_cpus;
 	struct thread_map	*threads;
 	unsigned int		sample_size;
 	int			id_pos;
diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
index 7e8ae21906e2..21ed6ee63da9 100644
--- a/tools/perf/util/parse-events.c
+++ b/tools/perf/util/parse-events.c
@@ -287,8 +287,8 @@ __add_event(struct list_head *list, int *idx,
 	if (!evsel)
 		return NULL;
 
-	if (cpus)
-		evsel->cpus = cpu_map__get(cpus);
+	evsel->cpus     = cpu_map__get(cpus);
+	evsel->own_cpus = cpu_map__get(cpus);
 
 	if (name)
 		evsel->name = strdup(name);
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [PATCH V3 08/14] perf tools: Make perf_evlist__set_maps() more resilient
  2015-09-08  7:58 [PATCH V3 00/14] perf tools: Fix gaps propagating maps Adrian Hunter
                   ` (6 preceding siblings ...)
  2015-09-08  7:58 ` [PATCH V3 07/14] perf tools: Add evsel->own_cpus Adrian Hunter
@ 2015-09-08  7:58 ` Adrian Hunter
  2015-09-16  7:33   ` [tip:perf/core] perf evlist: Make set_maps() " tip-bot for Adrian Hunter
  2015-09-08  7:58 ` [PATCH V3 09/14] perf tools: Make perf_evlist__create_maps() use perf_evlist__set_maps() Adrian Hunter
                   ` (6 subsequent siblings)
  14 siblings, 1 reply; 34+ messages in thread
From: Adrian Hunter @ 2015-09-08  7:58 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo; +Cc: Jiri Olsa, mingo, kan.liang, linux-kernel

Make perf_evlist__set_maps() more resilient by allowing for the
possibility that one or another of the maps isn't being changed
and therefore should not be "put".

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
 tools/perf/util/evlist.c | 19 +++++++++++++++----
 1 file changed, 15 insertions(+), 4 deletions(-)

diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index 5bd3b49452c6..78ff52ee8788 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -1155,11 +1155,22 @@ out_delete_threads:
 void perf_evlist__set_maps(struct perf_evlist *evlist, struct cpu_map *cpus,
 			   struct thread_map *threads)
 {
-	cpu_map__put(evlist->cpus);
-	evlist->cpus = cpus;
+	/*
+	 * Allow for the possibility that one or another of the maps isn't being
+	 * changed i.e. don't put it.  Note we are assuming the maps that are
+	 * being applied are brand new and evlist is taking ownership of the
+	 * original reference count of 1.  If that is not the case it is up to
+	 * the caller to increase the reference count.
+	 */
+	if (cpus != evlist->cpus) {
+		cpu_map__put(evlist->cpus);
+		evlist->cpus = cpus;
+	}
 
-	thread_map__put(evlist->threads);
-	evlist->threads = threads;
+	if (threads != evlist->threads) {
+		thread_map__put(evlist->threads);
+		evlist->threads = threads;
+	}
 
 	perf_evlist__propagate_maps(evlist);
 }
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [PATCH V3 09/14] perf tools: Make perf_evlist__create_maps() use perf_evlist__set_maps()
  2015-09-08  7:58 [PATCH V3 00/14] perf tools: Fix gaps propagating maps Adrian Hunter
                   ` (7 preceding siblings ...)
  2015-09-08  7:58 ` [PATCH V3 08/14] perf tools: Make perf_evlist__set_maps() more resilient Adrian Hunter
@ 2015-09-08  7:58 ` Adrian Hunter
  2015-09-16  7:33   ` [tip:perf/core] perf evlist: Make create_maps() use set_maps() tip-bot for Adrian Hunter
  2015-09-08  7:58 ` [PATCH V3 10/14] perf tools: Factor out a function to propagate maps for a single evsel Adrian Hunter
                   ` (5 subsequent siblings)
  14 siblings, 1 reply; 34+ messages in thread
From: Adrian Hunter @ 2015-09-08  7:58 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo; +Cc: Jiri Olsa, mingo, kan.liang, linux-kernel

Since there is a function to set maps, perf_evlist__create_maps()
should use it.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
 tools/perf/util/evlist.c | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)

diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index 78ff52ee8788..c17f3558a37a 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -1126,29 +1126,30 @@ static void perf_evlist__propagate_maps(struct perf_evlist *evlist)
 
 int perf_evlist__create_maps(struct perf_evlist *evlist, struct target *target)
 {
-	evlist->threads = thread_map__new_str(target->pid, target->tid,
-					      target->uid);
+	struct cpu_map *cpus;
+	struct thread_map *threads;
 
-	if (evlist->threads == NULL)
+	threads = thread_map__new_str(target->pid, target->tid, target->uid);
+
+	if (!threads)
 		return -1;
 
 	if (target__uses_dummy_map(target))
-		evlist->cpus = cpu_map__dummy_new();
+		cpus = cpu_map__dummy_new();
 	else
-		evlist->cpus = cpu_map__new(target->cpu_list);
+		cpus = cpu_map__new(target->cpu_list);
 
-	if (evlist->cpus == NULL)
+	if (!cpus)
 		goto out_delete_threads;
 
 	evlist->has_user_cpus = !!target->cpu_list;
 
-	perf_evlist__propagate_maps(evlist);
+	perf_evlist__set_maps(evlist, cpus, threads);
 
 	return 0;
 
 out_delete_threads:
-	thread_map__put(evlist->threads);
-	evlist->threads = NULL;
+	thread_map__put(threads);
 	return -1;
 }
 
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [PATCH V3 10/14] perf tools: Factor out a function to propagate maps for a single evsel
  2015-09-08  7:58 [PATCH V3 00/14] perf tools: Fix gaps propagating maps Adrian Hunter
                   ` (8 preceding siblings ...)
  2015-09-08  7:58 ` [PATCH V3 09/14] perf tools: Make perf_evlist__create_maps() use perf_evlist__set_maps() Adrian Hunter
@ 2015-09-08  7:58 ` Adrian Hunter
  2015-09-16  7:34   ` [tip:perf/core] perf evlist: " tip-bot for Adrian Hunter
  2015-09-08  7:58 ` [PATCH V3 11/14] perf tools: Fix perf_evlist__add() not propagating maps Adrian Hunter
                   ` (4 subsequent siblings)
  14 siblings, 1 reply; 34+ messages in thread
From: Adrian Hunter @ 2015-09-08  7:58 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo; +Cc: Jiri Olsa, mingo, kan.liang, linux-kernel

Subsequent fixes will need a function that just propagates maps
for a single evsel so factor it out.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
 tools/perf/util/evlist.c | 37 +++++++++++++++++++++----------------
 1 file changed, 21 insertions(+), 16 deletions(-)

diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index c17f3558a37a..fcaabd1e5dbb 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -1102,26 +1102,31 @@ int perf_evlist__mmap(struct perf_evlist *evlist, unsigned int pages,
 	return perf_evlist__mmap_ex(evlist, pages, overwrite, 0, false);
 }
 
+static void __perf_evlist__propagate_maps(struct perf_evlist *evlist,
+					  struct perf_evsel *evsel)
+{
+	/*
+	 * We already have cpus for evsel (via PMU sysfs) so
+	 * keep it, if there's no target cpu list defined.
+	 */
+	if (!evsel->own_cpus || evlist->has_user_cpus) {
+		cpu_map__put(evsel->cpus);
+		evsel->cpus = cpu_map__get(evlist->cpus);
+	} else if (evsel->cpus != evsel->own_cpus) {
+		cpu_map__put(evsel->cpus);
+		evsel->cpus = cpu_map__get(evsel->own_cpus);
+	}
+
+	thread_map__put(evsel->threads);
+	evsel->threads = thread_map__get(evlist->threads);
+}
+
 static void perf_evlist__propagate_maps(struct perf_evlist *evlist)
 {
 	struct perf_evsel *evsel;
 
-	evlist__for_each(evlist, evsel) {
-		/*
-		 * We already have cpus for evsel (via PMU sysfs) so
-		 * keep it, if there's no target cpu list defined.
-		 */
-		if (!evsel->own_cpus || evlist->has_user_cpus) {
-			cpu_map__put(evsel->cpus);
-			evsel->cpus = cpu_map__get(evlist->cpus);
-		} else if (evsel->cpus != evsel->own_cpus) {
-			cpu_map__put(evsel->cpus);
-			evsel->cpus = cpu_map__get(evsel->own_cpus);
-		}
-
-		thread_map__put(evsel->threads);
-		evsel->threads = thread_map__get(evlist->threads);
-	}
+	evlist__for_each(evlist, evsel)
+		__perf_evlist__propagate_maps(evlist, evsel);
 }
 
 int perf_evlist__create_maps(struct perf_evlist *evlist, struct target *target)
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [PATCH V3 11/14] perf tools: Fix perf_evlist__add() not propagating maps
  2015-09-08  7:58 [PATCH V3 00/14] perf tools: Fix gaps propagating maps Adrian Hunter
                   ` (9 preceding siblings ...)
  2015-09-08  7:58 ` [PATCH V3 10/14] perf tools: Factor out a function to propagate maps for a single evsel Adrian Hunter
@ 2015-09-08  7:58 ` Adrian Hunter
  2015-09-15 14:18   ` Arnaldo Carvalho de Melo
  2015-09-16  7:34   ` [tip:perf/core] perf evlist: Fix add() " tip-bot for Adrian Hunter
  2015-09-08  7:59 ` [PATCH V3 12/14] perf tools: Fix perf_evlist__create_syswide_maps() " Adrian Hunter
                   ` (3 subsequent siblings)
  14 siblings, 2 replies; 34+ messages in thread
From: Adrian Hunter @ 2015-09-08  7:58 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo; +Cc: Jiri Olsa, mingo, kan.liang, linux-kernel

If evsels are added after maps are created, then they won't
have any maps propagated to them.  Fix that.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
 tools/perf/util/evlist.c | 56 +++++++++++++++++++++++++-----------------------
 1 file changed, 29 insertions(+), 27 deletions(-)

diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index fcaabd1e5dbb..99267ab0d24a 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -124,6 +124,33 @@ void perf_evlist__delete(struct perf_evlist *evlist)
 	free(evlist);
 }
 
+static void __perf_evlist__propagate_maps(struct perf_evlist *evlist,
+					  struct perf_evsel *evsel)
+{
+	/*
+	 * We already have cpus for evsel (via PMU sysfs) so
+	 * keep it, if there's no target cpu list defined.
+	 */
+	if (!evsel->own_cpus || evlist->has_user_cpus) {
+		cpu_map__put(evsel->cpus);
+		evsel->cpus = cpu_map__get(evlist->cpus);
+	} else if (evsel->cpus != evsel->own_cpus) {
+		cpu_map__put(evsel->cpus);
+		evsel->cpus = cpu_map__get(evsel->own_cpus);
+	}
+
+	thread_map__put(evsel->threads);
+	evsel->threads = thread_map__get(evlist->threads);
+}
+
+static void perf_evlist__propagate_maps(struct perf_evlist *evlist)
+{
+	struct perf_evsel *evsel;
+
+	evlist__for_each(evlist, evsel)
+		__perf_evlist__propagate_maps(evlist, evsel);
+}
+
 void perf_evlist__add(struct perf_evlist *evlist, struct perf_evsel *entry)
 {
 	entry->evlist = evlist;
@@ -133,6 +160,8 @@ void perf_evlist__add(struct perf_evlist *evlist, struct perf_evsel *entry)
 
 	if (!evlist->nr_entries++)
 		perf_evlist__set_id_pos(evlist);
+
+	__perf_evlist__propagate_maps(evlist, entry);
 }
 
 void perf_evlist__splice_list_tail(struct perf_evlist *evlist,
@@ -1102,33 +1131,6 @@ int perf_evlist__mmap(struct perf_evlist *evlist, unsigned int pages,
 	return perf_evlist__mmap_ex(evlist, pages, overwrite, 0, false);
 }
 
-static void __perf_evlist__propagate_maps(struct perf_evlist *evlist,
-					  struct perf_evsel *evsel)
-{
-	/*
-	 * We already have cpus for evsel (via PMU sysfs) so
-	 * keep it, if there's no target cpu list defined.
-	 */
-	if (!evsel->own_cpus || evlist->has_user_cpus) {
-		cpu_map__put(evsel->cpus);
-		evsel->cpus = cpu_map__get(evlist->cpus);
-	} else if (evsel->cpus != evsel->own_cpus) {
-		cpu_map__put(evsel->cpus);
-		evsel->cpus = cpu_map__get(evsel->own_cpus);
-	}
-
-	thread_map__put(evsel->threads);
-	evsel->threads = thread_map__get(evlist->threads);
-}
-
-static void perf_evlist__propagate_maps(struct perf_evlist *evlist)
-{
-	struct perf_evsel *evsel;
-
-	evlist__for_each(evlist, evsel)
-		__perf_evlist__propagate_maps(evlist, evsel);
-}
-
 int perf_evlist__create_maps(struct perf_evlist *evlist, struct target *target)
 {
 	struct cpu_map *cpus;
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [PATCH V3 12/14] perf tools: Fix perf_evlist__create_syswide_maps() not propagating maps
  2015-09-08  7:58 [PATCH V3 00/14] perf tools: Fix gaps propagating maps Adrian Hunter
                   ` (10 preceding siblings ...)
  2015-09-08  7:58 ` [PATCH V3 11/14] perf tools: Fix perf_evlist__add() not propagating maps Adrian Hunter
@ 2015-09-08  7:59 ` Adrian Hunter
  2015-09-16  7:34   ` [tip:perf/core] perf evlist: Fix create_syswide_maps() " tip-bot for Adrian Hunter
  2015-09-08  7:59 ` [PATCH V3 13/14] perf tools: Fix task exit test setting maps Adrian Hunter
                   ` (2 subsequent siblings)
  14 siblings, 1 reply; 34+ messages in thread
From: Adrian Hunter @ 2015-09-08  7:59 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo; +Cc: Jiri Olsa, mingo, kan.liang, linux-kernel

Fix it by making it call perf_evlist__set_maps() instead of
setting the maps itself.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
 tools/perf/util/evlist.c | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)

diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index 99267ab0d24a..c8fc8a258f42 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -1400,6 +1400,8 @@ void perf_evlist__close(struct perf_evlist *evlist)
 
 static int perf_evlist__create_syswide_maps(struct perf_evlist *evlist)
 {
+	struct cpu_map	  *cpus;
+	struct thread_map *threads;
 	int err = -ENOMEM;
 
 	/*
@@ -1411,20 +1413,19 @@ static int perf_evlist__create_syswide_maps(struct perf_evlist *evlist)
 	 * error, and we may not want to do that fallback to a
 	 * default cpu identity map :-\
 	 */
-	evlist->cpus = cpu_map__new(NULL);
-	if (evlist->cpus == NULL)
+	cpus = cpu_map__new(NULL);
+	if (!cpus)
 		goto out;
 
-	evlist->threads = thread_map__new_dummy();
-	if (evlist->threads == NULL)
-		goto out_free_cpus;
+	threads = thread_map__new_dummy();
+	if (!threads)
+		goto out_put;
 
-	err = 0;
+	perf_evlist__set_maps(evlist, cpus, threads);
 out:
 	return err;
-out_free_cpus:
-	cpu_map__put(evlist->cpus);
-	evlist->cpus = NULL;
+out_put:
+	cpu_map__put(cpus);
 	goto out;
 }
 
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [PATCH V3 13/14] perf tools: Fix task exit test setting maps
  2015-09-08  7:58 [PATCH V3 00/14] perf tools: Fix gaps propagating maps Adrian Hunter
                   ` (11 preceding siblings ...)
  2015-09-08  7:59 ` [PATCH V3 12/14] perf tools: Fix perf_evlist__create_syswide_maps() " Adrian Hunter
@ 2015-09-08  7:59 ` Adrian Hunter
  2015-09-16  7:35   ` [tip:perf/core] perf tests: " tip-bot for Adrian Hunter
  2015-09-08  7:59 ` [PATCH V3 14/14] perf tools: Fix software clock events " Adrian Hunter
  2015-09-08  8:08 ` [PATCH V3 00/14] perf tools: Fix gaps propagating maps Jiri Olsa
  14 siblings, 1 reply; 34+ messages in thread
From: Adrian Hunter @ 2015-09-08  7:59 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo; +Cc: Jiri Olsa, mingo, kan.liang, linux-kernel

The test titled "Test number of exit event of a simple workload"
was setting cpu/thread maps directly.  Make it use the proper
function perf_evlist__set_maps() especially now that it also
propagates the maps.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
 tools/perf/tests/task-exit.c | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)

diff --git a/tools/perf/tests/task-exit.c b/tools/perf/tests/task-exit.c
index 3a8fedef83bc..add16385f13e 100644
--- a/tools/perf/tests/task-exit.c
+++ b/tools/perf/tests/task-exit.c
@@ -43,6 +43,8 @@ int test__task_exit(void)
 	};
 	const char *argv[] = { "true", NULL };
 	char sbuf[STRERR_BUFSIZE];
+	struct cpu_map *cpus;
+	struct thread_map *threads;
 
 	signal(SIGCHLD, sig_handler);
 
@@ -58,14 +60,19 @@ int test__task_exit(void)
 	 * perf_evlist__prepare_workload we'll fill in the only thread
 	 * we're monitoring, the one forked there.
 	 */
-	evlist->cpus = cpu_map__dummy_new();
-	evlist->threads = thread_map__new_by_tid(-1);
-	if (!evlist->cpus || !evlist->threads) {
+	cpus = cpu_map__dummy_new();
+	threads = thread_map__new_by_tid(-1);
+	if (!cpus || !threads) {
 		err = -ENOMEM;
 		pr_debug("Not enough memory to create thread/cpu maps\n");
-		goto out_delete_evlist;
+		goto out_free_maps;
 	}
 
+	perf_evlist__set_maps(evlist, cpus, threads);
+
+	cpus	= NULL;
+	threads = NULL;
+
 	err = perf_evlist__prepare_workload(evlist, &target, argv, false,
 					    workload_exec_failed_signal);
 	if (err < 0) {
@@ -114,6 +121,9 @@ retry:
 		err = -1;
 	}
 
+out_free_maps:
+	cpu_map__put(cpus);
+	thread_map__put(threads);
 out_delete_evlist:
 	perf_evlist__delete(evlist);
 	return err;
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [PATCH V3 14/14] perf tools: Fix software clock events test setting maps
  2015-09-08  7:58 [PATCH V3 00/14] perf tools: Fix gaps propagating maps Adrian Hunter
                   ` (12 preceding siblings ...)
  2015-09-08  7:59 ` [PATCH V3 13/14] perf tools: Fix task exit test setting maps Adrian Hunter
@ 2015-09-08  7:59 ` Adrian Hunter
  2015-09-16  7:35   ` [tip:perf/core] perf tests: " tip-bot for Adrian Hunter
  2015-09-08  8:08 ` [PATCH V3 00/14] perf tools: Fix gaps propagating maps Jiri Olsa
  14 siblings, 1 reply; 34+ messages in thread
From: Adrian Hunter @ 2015-09-08  7:59 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo; +Cc: Jiri Olsa, mingo, kan.liang, linux-kernel

The test titled "Test software clock events have valid period values"
was setting cpu/thread maps directly.  Make it use the proper
function perf_evlist__set_maps() especially now that it also
propagates the maps.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
 tools/perf/tests/sw-clock.c | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)

diff --git a/tools/perf/tests/sw-clock.c b/tools/perf/tests/sw-clock.c
index 1aa21c90731b..5b83f56a3b6f 100644
--- a/tools/perf/tests/sw-clock.c
+++ b/tools/perf/tests/sw-clock.c
@@ -34,6 +34,8 @@ static int __test__sw_clock_freq(enum perf_sw_ids clock_id)
 		.disabled = 1,
 		.freq = 1,
 	};
+	struct cpu_map *cpus;
+	struct thread_map *threads;
 
 	attr.sample_freq = 500;
 
@@ -50,14 +52,19 @@ static int __test__sw_clock_freq(enum perf_sw_ids clock_id)
 	}
 	perf_evlist__add(evlist, evsel);
 
-	evlist->cpus = cpu_map__dummy_new();
-	evlist->threads = thread_map__new_by_tid(getpid());
-	if (!evlist->cpus || !evlist->threads) {
+	cpus = cpu_map__dummy_new();
+	threads = thread_map__new_by_tid(getpid());
+	if (!cpus || !threads) {
 		err = -ENOMEM;
 		pr_debug("Not enough memory to create thread/cpu maps\n");
-		goto out_delete_evlist;
+		goto out_free_maps;
 	}
 
+	perf_evlist__set_maps(evlist, cpus, threads);
+
+	cpus	= NULL;
+	threads = NULL;
+
 	if (perf_evlist__open(evlist)) {
 		const char *knob = "/proc/sys/kernel/perf_event_max_sample_rate";
 
@@ -107,6 +114,9 @@ next_event:
 		err = -1;
 	}
 
+out_free_maps:
+	cpu_map__put(cpus);
+	thread_map__put(threads);
 out_delete_evlist:
 	perf_evlist__delete(evlist);
 	return err;
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 34+ messages in thread

* Re: [PATCH V3 00/14] perf tools: Fix gaps propagating maps
  2015-09-08  7:58 [PATCH V3 00/14] perf tools: Fix gaps propagating maps Adrian Hunter
                   ` (13 preceding siblings ...)
  2015-09-08  7:59 ` [PATCH V3 14/14] perf tools: Fix software clock events " Adrian Hunter
@ 2015-09-08  8:08 ` Jiri Olsa
  2015-09-15  6:52   ` Adrian Hunter
  14 siblings, 1 reply; 34+ messages in thread
From: Jiri Olsa @ 2015-09-08  8:08 UTC (permalink / raw)
  To: Adrian Hunter; +Cc: Arnaldo Carvalho de Melo, mingo, kan.liang, linux-kernel

On Tue, Sep 08, 2015 at 10:58:48AM +0300, Adrian Hunter wrote:
> Hi
> 
> Here is V3 of "Fix gaps propagating maps" that fixes some problems
> revealed by to d988d5ee6478 ("perf evlist: Open event on evsel cpus and threads")
> 
> Changes in V3:
> 
> 	perf tools: Remove redundant validation from perf_evlist__propagate_maps
> 		perf_evlist__set_maps also doesn't need to return an error anymore
> 
> 	perf tools: Add evlist->has_user_cpus
> 		Adjusted due to perf_evlist__set_maps change
> 
> 	perf tools: Make perf_evlist__create_maps() use perf_evlist__set_maps()
> 		Adjusted due to perf_evlist__set_maps change
> 
> 	perf tools: Fix perf_evlist__create_syswide_maps() not propagating maps
> 		Adjusted due to perf_evlist__set_maps change
> 
> 	perf tools: Fix task exit test setting maps
> 		Adjusted due to perf_evlist__set_maps change
> 
> 	perf tools: Fix software clock events test setting maps
> 		Adjusted due to perf_evlist__set_maps change

Acked-by: Jiri Olsa <jolsa@kernel.org>

thanks,
jirka

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [PATCH V3 00/14] perf tools: Fix gaps propagating maps
  2015-09-08  8:08 ` [PATCH V3 00/14] perf tools: Fix gaps propagating maps Jiri Olsa
@ 2015-09-15  6:52   ` Adrian Hunter
  2015-09-15 13:06     ` Arnaldo Carvalho de Melo
  2015-09-15 14:17     ` Arnaldo Carvalho de Melo
  0 siblings, 2 replies; 34+ messages in thread
From: Adrian Hunter @ 2015-09-15  6:52 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo; +Cc: Jiri Olsa, mingo, kan.liang, linux-kernel

On 08/09/15 11:08, Jiri Olsa wrote:
> On Tue, Sep 08, 2015 at 10:58:48AM +0300, Adrian Hunter wrote:
>> Hi
>>
>> Here is V3 of "Fix gaps propagating maps" that fixes some problems
>> revealed by to d988d5ee6478 ("perf evlist: Open event on evsel cpus and threads")
>>
>> Changes in V3:
>>
>> 	perf tools: Remove redundant validation from perf_evlist__propagate_maps
>> 		perf_evlist__set_maps also doesn't need to return an error anymore
>>
>> 	perf tools: Add evlist->has_user_cpus
>> 		Adjusted due to perf_evlist__set_maps change
>>
>> 	perf tools: Make perf_evlist__create_maps() use perf_evlist__set_maps()
>> 		Adjusted due to perf_evlist__set_maps change
>>
>> 	perf tools: Fix perf_evlist__create_syswide_maps() not propagating maps
>> 		Adjusted due to perf_evlist__set_maps change
>>
>> 	perf tools: Fix task exit test setting maps
>> 		Adjusted due to perf_evlist__set_maps change
>>
>> 	perf tools: Fix software clock events test setting maps
>> 		Adjusted due to perf_evlist__set_maps change
> 
> Acked-by: Jiri Olsa <jolsa@kernel.org>

Hi Arnaldo

Please don't forget these.  Intel PT is broken on 4.3 without them i.e.

$ tools/perf/perf --version
perf version 4.3.rc1.gd25ed
$ tools/perf/perf record -e intel_pt//u uname
Error:
The sys_perf_event_open() syscall returned with 22 (Invalid argument) for
event (sched:sched_switch).

Regards
Adrian


^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [PATCH V3 00/14] perf tools: Fix gaps propagating maps
  2015-09-15  6:52   ` Adrian Hunter
@ 2015-09-15 13:06     ` Arnaldo Carvalho de Melo
  2015-09-15 14:17     ` Arnaldo Carvalho de Melo
  1 sibling, 0 replies; 34+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-09-15 13:06 UTC (permalink / raw)
  To: Adrian Hunter; +Cc: Jiri Olsa, mingo, kan.liang, linux-kernel

Em Tue, Sep 15, 2015 at 09:52:56AM +0300, Adrian Hunter escreveu:
> On 08/09/15 11:08, Jiri Olsa wrote:
> > On Tue, Sep 08, 2015 at 10:58:48AM +0300, Adrian Hunter wrote:
> >> Hi
> >>
> >> Here is V3 of "Fix gaps propagating maps" that fixes some problems
> >> revealed by to d988d5ee6478 ("perf evlist: Open event on evsel cpus and threads")
> >>
> >> Changes in V3:
> >>
> >> 	perf tools: Remove redundant validation from perf_evlist__propagate_maps
> >> 		perf_evlist__set_maps also doesn't need to return an error anymore
> >>
> >> 	perf tools: Add evlist->has_user_cpus
> >> 		Adjusted due to perf_evlist__set_maps change
> >>
> >> 	perf tools: Make perf_evlist__create_maps() use perf_evlist__set_maps()
> >> 		Adjusted due to perf_evlist__set_maps change
> >>
> >> 	perf tools: Fix perf_evlist__create_syswide_maps() not propagating maps
> >> 		Adjusted due to perf_evlist__set_maps change
> >>
> >> 	perf tools: Fix task exit test setting maps
> >> 		Adjusted due to perf_evlist__set_maps change
> >>
> >> 	perf tools: Fix software clock events test setting maps
> >> 		Adjusted due to perf_evlist__set_maps change
> > 
> > Acked-by: Jiri Olsa <jolsa@kernel.org>
> 
> Hi Arnaldo
> 
> Please don't forget these.  Intel PT is broken on 4.3 without them i.e.
> 
> $ tools/perf/perf --version
> perf version 4.3.rc1.gd25ed
> $ tools/perf/perf record -e intel_pt//u uname
> Error:
> The sys_perf_event_open() syscall returned with 22 (Invalid argument) for
> event (sched:sched_switch).

Ok, so this needs to go to perf/urgent, checking them now.

- Arnaldo

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [PATCH V3 00/14] perf tools: Fix gaps propagating maps
  2015-09-15  6:52   ` Adrian Hunter
  2015-09-15 13:06     ` Arnaldo Carvalho de Melo
@ 2015-09-15 14:17     ` Arnaldo Carvalho de Melo
  1 sibling, 0 replies; 34+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-09-15 14:17 UTC (permalink / raw)
  To: Adrian Hunter; +Cc: Jiri Olsa, mingo, kan.liang, linux-kernel

Em Tue, Sep 15, 2015 at 09:52:56AM +0300, Adrian Hunter escreveu:
> On 08/09/15 11:08, Jiri Olsa wrote:
> > On Tue, Sep 08, 2015 at 10:58:48AM +0300, Adrian Hunter wrote:
> >> Hi
> >>
> >> Here is V3 of "Fix gaps propagating maps" that fixes some problems
> >> revealed by to d988d5ee6478 ("perf evlist: Open event on evsel cpus and threads")
> >>
> >> Changes in V3:
> >>
> >> 	perf tools: Remove redundant validation from perf_evlist__propagate_maps
> >> 		perf_evlist__set_maps also doesn't need to return an error anymore
> >>
> >> 	perf tools: Add evlist->has_user_cpus
> >> 		Adjusted due to perf_evlist__set_maps change
> >>
> >> 	perf tools: Make perf_evlist__create_maps() use perf_evlist__set_maps()
> >> 		Adjusted due to perf_evlist__set_maps change
> >>
> >> 	perf tools: Fix perf_evlist__create_syswide_maps() not propagating maps
> >> 		Adjusted due to perf_evlist__set_maps change
> >>
> >> 	perf tools: Fix task exit test setting maps
> >> 		Adjusted due to perf_evlist__set_maps change
> >>
> >> 	perf tools: Fix software clock events test setting maps
> >> 		Adjusted due to perf_evlist__set_maps change
> > 
> > Acked-by: Jiri Olsa <jolsa@kernel.org>
> 
> Hi Arnaldo
> 
> Please don't forget these.  Intel PT is broken on 4.3 without them i.e.
> 
> $ tools/perf/perf --version
> perf version 4.3.rc1.gd25ed
> $ tools/perf/perf record -e intel_pt//u uname
> Error:
> The sys_perf_event_open() syscall returned with 22 (Invalid argument) for
> event (sched:sched_switch).

Ok, applied the series, with just one change, which was patch-cosmetic,
see the other message I'll send.

- Arnaldo

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [PATCH V3 11/14] perf tools: Fix perf_evlist__add() not propagating maps
  2015-09-08  7:58 ` [PATCH V3 11/14] perf tools: Fix perf_evlist__add() not propagating maps Adrian Hunter
@ 2015-09-15 14:18   ` Arnaldo Carvalho de Melo
  2015-09-16  7:34   ` [tip:perf/core] perf evlist: Fix add() " tip-bot for Adrian Hunter
  1 sibling, 0 replies; 34+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-09-15 14:18 UTC (permalink / raw)
  To: Adrian Hunter; +Cc: Jiri Olsa, mingo, kan.liang, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 3531 bytes --]

Em Tue, Sep 08, 2015 at 10:58:59AM +0300, Adrian Hunter escreveu:
> If evsels are added after maps are created, then they won't
> have any maps propagated to them.  Fix that.

Next time please consider, when introducing this a new function A() that
will be needed by a function B() in a subsequent patch to introduce A()
before B() if A() is static, i.e. to avoid making the patch making B()
use A() be larger than necessary by having to move A() to before B().

When reviewing I went, "oh, but this function was introduced already in
the previous patch?!" only to figure out that it was unchanged, just
being moved.

I did it this time, please see the two attached patches.

Thanks,

- Arnaldo
 
> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
> ---
>  tools/perf/util/evlist.c | 56 +++++++++++++++++++++++++-----------------------
>  1 file changed, 29 insertions(+), 27 deletions(-)
> 
> diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
> index fcaabd1e5dbb..99267ab0d24a 100644
> --- a/tools/perf/util/evlist.c
> +++ b/tools/perf/util/evlist.c
> @@ -124,6 +124,33 @@ void perf_evlist__delete(struct perf_evlist *evlist)
>  	free(evlist);
>  }
>  
> +static void __perf_evlist__propagate_maps(struct perf_evlist *evlist,
> +					  struct perf_evsel *evsel)
> +{
> +	/*
> +	 * We already have cpus for evsel (via PMU sysfs) so
> +	 * keep it, if there's no target cpu list defined.
> +	 */
> +	if (!evsel->own_cpus || evlist->has_user_cpus) {
> +		cpu_map__put(evsel->cpus);
> +		evsel->cpus = cpu_map__get(evlist->cpus);
> +	} else if (evsel->cpus != evsel->own_cpus) {
> +		cpu_map__put(evsel->cpus);
> +		evsel->cpus = cpu_map__get(evsel->own_cpus);
> +	}
> +
> +	thread_map__put(evsel->threads);
> +	evsel->threads = thread_map__get(evlist->threads);
> +}
> +
> +static void perf_evlist__propagate_maps(struct perf_evlist *evlist)
> +{
> +	struct perf_evsel *evsel;
> +
> +	evlist__for_each(evlist, evsel)
> +		__perf_evlist__propagate_maps(evlist, evsel);
> +}
> +
>  void perf_evlist__add(struct perf_evlist *evlist, struct perf_evsel *entry)
>  {
>  	entry->evlist = evlist;
> @@ -133,6 +160,8 @@ void perf_evlist__add(struct perf_evlist *evlist, struct perf_evsel *entry)
>  
>  	if (!evlist->nr_entries++)
>  		perf_evlist__set_id_pos(evlist);
> +
> +	__perf_evlist__propagate_maps(evlist, entry);
>  }
>  
>  void perf_evlist__splice_list_tail(struct perf_evlist *evlist,
> @@ -1102,33 +1131,6 @@ int perf_evlist__mmap(struct perf_evlist *evlist, unsigned int pages,
>  	return perf_evlist__mmap_ex(evlist, pages, overwrite, 0, false);
>  }
>  
> -static void __perf_evlist__propagate_maps(struct perf_evlist *evlist,
> -					  struct perf_evsel *evsel)
> -{
> -	/*
> -	 * We already have cpus for evsel (via PMU sysfs) so
> -	 * keep it, if there's no target cpu list defined.
> -	 */
> -	if (!evsel->own_cpus || evlist->has_user_cpus) {
> -		cpu_map__put(evsel->cpus);
> -		evsel->cpus = cpu_map__get(evlist->cpus);
> -	} else if (evsel->cpus != evsel->own_cpus) {
> -		cpu_map__put(evsel->cpus);
> -		evsel->cpus = cpu_map__get(evsel->own_cpus);
> -	}
> -
> -	thread_map__put(evsel->threads);
> -	evsel->threads = thread_map__get(evlist->threads);
> -}
> -
> -static void perf_evlist__propagate_maps(struct perf_evlist *evlist)
> -{
> -	struct perf_evsel *evsel;
> -
> -	evlist__for_each(evlist, evsel)
> -		__perf_evlist__propagate_maps(evlist, evsel);
> -}
> -
>  int perf_evlist__create_maps(struct perf_evlist *evlist, struct target *target)
>  {
>  	struct cpu_map *cpus;
> -- 
> 1.9.1

[-- Attachment #2: 0001-perf-evlist-Factor-out-a-function-to-propagate-maps-.patch --]
[-- Type: text/plain, Size: 2898 bytes --]

>From adc0c3e87b0e1baeccabe09b6dba738f17d0e91d Mon Sep 17 00:00:00 2001
From: Adrian Hunter <adrian.hunter@intel.com>
Date: Tue, 8 Sep 2015 10:58:58 +0300
Subject: [PATCH 1/2] perf evlist: Factor out a function to propagate maps for
 a single evsel

Subsequent fixes will need a function that just propagates maps for a
single evsel so factor it out.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@intel.com>
Link: http://lkml.kernel.org/r/1441699142-18905-11-git-send-email-adrian.hunter@intel.com
[ Moved them to before perf_evlist__add() to avoid having to move it in the next patch ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/evlist.c | 49 ++++++++++++++++++++++++++----------------------
 1 file changed, 27 insertions(+), 22 deletions(-)

diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index c17f3558a37a..4e840bfc19ef 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -124,6 +124,33 @@ void perf_evlist__delete(struct perf_evlist *evlist)
 	free(evlist);
 }
 
+static void __perf_evlist__propagate_maps(struct perf_evlist *evlist,
+					  struct perf_evsel *evsel)
+{
+	/*
+	 * We already have cpus for evsel (via PMU sysfs) so
+	 * keep it, if there's no target cpu list defined.
+	 */
+	if (!evsel->own_cpus || evlist->has_user_cpus) {
+		cpu_map__put(evsel->cpus);
+		evsel->cpus = cpu_map__get(evlist->cpus);
+	} else if (evsel->cpus != evsel->own_cpus) {
+		cpu_map__put(evsel->cpus);
+		evsel->cpus = cpu_map__get(evsel->own_cpus);
+	}
+
+	thread_map__put(evsel->threads);
+	evsel->threads = thread_map__get(evlist->threads);
+}
+
+static void perf_evlist__propagate_maps(struct perf_evlist *evlist)
+{
+	struct perf_evsel *evsel;
+
+	evlist__for_each(evlist, evsel)
+		__perf_evlist__propagate_maps(evlist, evsel);
+}
+
 void perf_evlist__add(struct perf_evlist *evlist, struct perf_evsel *entry)
 {
 	entry->evlist = evlist;
@@ -1102,28 +1129,6 @@ int perf_evlist__mmap(struct perf_evlist *evlist, unsigned int pages,
 	return perf_evlist__mmap_ex(evlist, pages, overwrite, 0, false);
 }
 
-static void perf_evlist__propagate_maps(struct perf_evlist *evlist)
-{
-	struct perf_evsel *evsel;
-
-	evlist__for_each(evlist, evsel) {
-		/*
-		 * We already have cpus for evsel (via PMU sysfs) so
-		 * keep it, if there's no target cpu list defined.
-		 */
-		if (!evsel->own_cpus || evlist->has_user_cpus) {
-			cpu_map__put(evsel->cpus);
-			evsel->cpus = cpu_map__get(evlist->cpus);
-		} else if (evsel->cpus != evsel->own_cpus) {
-			cpu_map__put(evsel->cpus);
-			evsel->cpus = cpu_map__get(evsel->own_cpus);
-		}
-
-		thread_map__put(evsel->threads);
-		evsel->threads = thread_map__get(evlist->threads);
-	}
-}
-
 int perf_evlist__create_maps(struct perf_evlist *evlist, struct target *target)
 {
 	struct cpu_map *cpus;
-- 
2.1.0


[-- Attachment #3: 0002-perf-evlist-Fix-add-not-propagating-maps.patch --]
[-- Type: text/plain, Size: 1262 bytes --]

>From 44c42d71c659527c81bf169808959c9339116d85 Mon Sep 17 00:00:00 2001
From: Adrian Hunter <adrian.hunter@intel.com>
Date: Tue, 8 Sep 2015 10:58:59 +0300
Subject: [PATCH 2/2] perf evlist: Fix add() not propagating maps

If evsels are added after maps are created, then they won't have any
maps propagated to them.  Fix that.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@intel.com>
Link: http://lkml.kernel.org/r/1441699142-18905-12-git-send-email-adrian.hunter@intel.com
[ Moved the moving of propagate_maps() to the patch before, so that this
  one does _just_ the one lile fix calling in add()]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/evlist.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index 4e840bfc19ef..99267ab0d24a 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -160,6 +160,8 @@ void perf_evlist__add(struct perf_evlist *evlist, struct perf_evsel *entry)
 
 	if (!evlist->nr_entries++)
 		perf_evlist__set_id_pos(evlist);
+
+	__perf_evlist__propagate_maps(evlist, entry);
 }
 
 void perf_evlist__splice_list_tail(struct perf_evlist *evlist,
-- 
2.1.0


^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [tip:perf/core] perf evlist: Simplify propagate_maps() logic
  2015-09-08  7:58 ` [PATCH V3 01/14] perf tools: Simplify perf_evlist__propagate_maps logic Adrian Hunter
@ 2015-09-16  7:30   ` tip-bot for Adrian Hunter
  0 siblings, 0 replies; 34+ messages in thread
From: tip-bot for Adrian Hunter @ 2015-09-16  7:30 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: adrian.hunter, jolsa, tglx, acme, kan.liang, hpa, mingo, linux-kernel

Commit-ID:  a69b09e2342a9c144b0291b9aeb849ab7d5843bf
Gitweb:     http://git.kernel.org/tip/a69b09e2342a9c144b0291b9aeb849ab7d5843bf
Author:     Adrian Hunter <adrian.hunter@intel.com>
AuthorDate: Tue, 8 Sep 2015 10:58:49 +0300
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Tue, 15 Sep 2015 10:08:22 -0300

perf evlist: Simplify propagate_maps() logic

If evsel->cpus is to be reassigned then the current value must be "put",
which works even if it is NULL.  Simplify the current logic by moving
the "put" next to the assignment.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@intel.com>
Link: http://lkml.kernel.org/r/1441699142-18905-2-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/evlist.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index d51a520..95e07ea 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -1113,11 +1113,10 @@ static int perf_evlist__propagate_maps(struct perf_evlist *evlist,
 		 * We already have cpus for evsel (via PMU sysfs) so
 		 * keep it, if there's no target cpu list defined.
 		 */
-		if (evsel->cpus && has_user_cpus)
+		if (!evsel->cpus || has_user_cpus) {
 			cpu_map__put(evsel->cpus);
-
-		if (!evsel->cpus || has_user_cpus)
 			evsel->cpus = cpu_map__get(evlist->cpus);
+		}
 
 		evsel->threads = thread_map__get(evlist->threads);
 

^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [tip:perf/core] perf evlist: Simplify set_maps() logic
  2015-09-08  7:58 ` [PATCH V3 02/14] perf tools: Simplify perf_evlist__set_maps logic Adrian Hunter
@ 2015-09-16  7:31   ` tip-bot for Adrian Hunter
  0 siblings, 0 replies; 34+ messages in thread
From: tip-bot for Adrian Hunter @ 2015-09-16  7:31 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: linux-kernel, hpa, mingo, acme, tglx, adrian.hunter, kan.liang, jolsa

Commit-ID:  725e06b2e2754fbff61521fa76fee51cee5bcb5f
Gitweb:     http://git.kernel.org/tip/725e06b2e2754fbff61521fa76fee51cee5bcb5f
Author:     Adrian Hunter <adrian.hunter@intel.com>
AuthorDate: Tue, 8 Sep 2015 10:58:50 +0300
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Tue, 15 Sep 2015 10:15:39 -0300

perf evlist: Simplify set_maps() logic

Don't need to check for NULL when "putting" evlist->maps and
evlist->threads because the "put" functions already do that.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@intel.com>
Link: http://lkml.kernel.org/r/1441699142-18905-3-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/evlist.c | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index 95e07ea..9cb9296 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -1156,14 +1156,10 @@ int perf_evlist__set_maps(struct perf_evlist *evlist,
 			  struct cpu_map *cpus,
 			  struct thread_map *threads)
 {
-	if (evlist->cpus)
-		cpu_map__put(evlist->cpus);
-
+	cpu_map__put(evlist->cpus);
 	evlist->cpus = cpus;
 
-	if (evlist->threads)
-		thread_map__put(evlist->threads);
-
+	thread_map__put(evlist->threads);
 	evlist->threads = threads;
 
 	return perf_evlist__propagate_maps(evlist, false);

^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [tip:perf/core] perf evlist: Remove redundant validation from propagate_maps()
  2015-09-08  7:58 ` [PATCH V3 03/14] perf tools: Remove redundant validation from perf_evlist__propagate_maps Adrian Hunter
@ 2015-09-16  7:31   ` tip-bot for Adrian Hunter
  0 siblings, 0 replies; 34+ messages in thread
From: tip-bot for Adrian Hunter @ 2015-09-16  7:31 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: tglx, acme, hpa, kan.liang, mingo, adrian.hunter, linux-kernel, jolsa

Commit-ID:  d5bc056e73841d4bc941474a342ef9b6a207ac84
Gitweb:     http://git.kernel.org/tip/d5bc056e73841d4bc941474a342ef9b6a207ac84
Author:     Adrian Hunter <adrian.hunter@intel.com>
AuthorDate: Tue, 8 Sep 2015 10:58:51 +0300
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Tue, 15 Sep 2015 10:16:48 -0300

perf evlist: Remove redundant validation from propagate_maps()

The validation checks that the values that were just assigned, got
assigned i.e. the error can't ever happen.  Subsequent patches will call
this code in places where errors are not being returned.  Changing those
code paths to return this non-existent error is counter-productive, so
just remove it.

That in turn results in perf_evlist__set_maps not needing to return an
error, but callers aren't checking it either, so remove that too.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@intel.com>
Link: http://lkml.kernel.org/r/1441699142-18905-4-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/evlist.c | 21 ++++++++-------------
 tools/perf/util/evlist.h |  5 ++---
 2 files changed, 10 insertions(+), 16 deletions(-)

diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index 9cb9296..785bfd3 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -1103,8 +1103,8 @@ int perf_evlist__mmap(struct perf_evlist *evlist, unsigned int pages,
 	return perf_evlist__mmap_ex(evlist, pages, overwrite, 0, false);
 }
 
-static int perf_evlist__propagate_maps(struct perf_evlist *evlist,
-				       bool has_user_cpus)
+static void perf_evlist__propagate_maps(struct perf_evlist *evlist,
+					bool has_user_cpus)
 {
 	struct perf_evsel *evsel;
 
@@ -1119,13 +1119,7 @@ static int perf_evlist__propagate_maps(struct perf_evlist *evlist,
 		}
 
 		evsel->threads = thread_map__get(evlist->threads);
-
-		if ((evlist->cpus && !evsel->cpus) ||
-		    (evlist->threads && !evsel->threads))
-			return -ENOMEM;
 	}
-
-	return 0;
 }
 
 int perf_evlist__create_maps(struct perf_evlist *evlist, struct target *target)
@@ -1144,7 +1138,9 @@ int perf_evlist__create_maps(struct perf_evlist *evlist, struct target *target)
 	if (evlist->cpus == NULL)
 		goto out_delete_threads;
 
-	return perf_evlist__propagate_maps(evlist, !!target->cpu_list);
+	perf_evlist__propagate_maps(evlist, !!target->cpu_list);
+
+	return 0;
 
 out_delete_threads:
 	thread_map__put(evlist->threads);
@@ -1152,9 +1148,8 @@ out_delete_threads:
 	return -1;
 }
 
-int perf_evlist__set_maps(struct perf_evlist *evlist,
-			  struct cpu_map *cpus,
-			  struct thread_map *threads)
+void perf_evlist__set_maps(struct perf_evlist *evlist, struct cpu_map *cpus,
+			   struct thread_map *threads)
 {
 	cpu_map__put(evlist->cpus);
 	evlist->cpus = cpus;
@@ -1162,7 +1157,7 @@ int perf_evlist__set_maps(struct perf_evlist *evlist,
 	thread_map__put(evlist->threads);
 	evlist->threads = threads;
 
-	return perf_evlist__propagate_maps(evlist, false);
+	perf_evlist__propagate_maps(evlist, false);
 }
 
 int perf_evlist__apply_filters(struct perf_evlist *evlist, struct perf_evsel **err_evsel)
diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h
index b39a619..da2fa91 100644
--- a/tools/perf/util/evlist.h
+++ b/tools/perf/util/evlist.h
@@ -155,9 +155,8 @@ int perf_evlist__enable_event_idx(struct perf_evlist *evlist,
 void perf_evlist__set_selected(struct perf_evlist *evlist,
 			       struct perf_evsel *evsel);
 
-int perf_evlist__set_maps(struct perf_evlist *evlist,
-			  struct cpu_map *cpus,
-			  struct thread_map *threads);
+void perf_evlist__set_maps(struct perf_evlist *evlist, struct cpu_map *cpus,
+			   struct thread_map *threads);
 int perf_evlist__create_maps(struct perf_evlist *evlist, struct target *target);
 int perf_evlist__apply_filters(struct perf_evlist *evlist, struct perf_evsel **err_evsel);
 

^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [tip:perf/core] perf evlist: Add has_user_cpus member
  2015-09-08  7:58 ` [PATCH V3 04/14] perf tools: Add evlist->has_user_cpus Adrian Hunter
@ 2015-09-16  7:32   ` tip-bot for Adrian Hunter
  0 siblings, 0 replies; 34+ messages in thread
From: tip-bot for Adrian Hunter @ 2015-09-16  7:32 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: adrian.hunter, jolsa, acme, hpa, kan.liang, tglx, linux-kernel, mingo

Commit-ID:  ec9a77a7e3346a05b1287597982d0dd09dd1c3bd
Gitweb:     http://git.kernel.org/tip/ec9a77a7e3346a05b1287597982d0dd09dd1c3bd
Author:     Adrian Hunter <adrian.hunter@intel.com>
AuthorDate: Tue, 8 Sep 2015 10:58:52 +0300
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Tue, 15 Sep 2015 10:20:50 -0300

perf evlist: Add has_user_cpus member

Subsequent patches will need to call perf_evlist__propagate_maps without
reference to a "target".  Add evlist->has_user_cpus to record whether
the user has specified which cpus to target (and therefore whether that
list of cpus should override the default settings for a selected event
i.e. the cpu maps should be propagated)

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@intel.com>
Link: http://lkml.kernel.org/r/1441699142-18905-5-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/evlist.c | 11 ++++++-----
 tools/perf/util/evlist.h |  1 +
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index 785bfd3..3a4445f 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -1103,8 +1103,7 @@ int perf_evlist__mmap(struct perf_evlist *evlist, unsigned int pages,
 	return perf_evlist__mmap_ex(evlist, pages, overwrite, 0, false);
 }
 
-static void perf_evlist__propagate_maps(struct perf_evlist *evlist,
-					bool has_user_cpus)
+static void perf_evlist__propagate_maps(struct perf_evlist *evlist)
 {
 	struct perf_evsel *evsel;
 
@@ -1113,7 +1112,7 @@ static void perf_evlist__propagate_maps(struct perf_evlist *evlist,
 		 * We already have cpus for evsel (via PMU sysfs) so
 		 * keep it, if there's no target cpu list defined.
 		 */
-		if (!evsel->cpus || has_user_cpus) {
+		if (!evsel->cpus || evlist->has_user_cpus) {
 			cpu_map__put(evsel->cpus);
 			evsel->cpus = cpu_map__get(evlist->cpus);
 		}
@@ -1138,7 +1137,9 @@ int perf_evlist__create_maps(struct perf_evlist *evlist, struct target *target)
 	if (evlist->cpus == NULL)
 		goto out_delete_threads;
 
-	perf_evlist__propagate_maps(evlist, !!target->cpu_list);
+	evlist->has_user_cpus = !!target->cpu_list;
+
+	perf_evlist__propagate_maps(evlist);
 
 	return 0;
 
@@ -1157,7 +1158,7 @@ void perf_evlist__set_maps(struct perf_evlist *evlist, struct cpu_map *cpus,
 	thread_map__put(evlist->threads);
 	evlist->threads = threads;
 
-	perf_evlist__propagate_maps(evlist, false);
+	perf_evlist__propagate_maps(evlist);
 }
 
 int perf_evlist__apply_filters(struct perf_evlist *evlist, struct perf_evsel **err_evsel)
diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h
index da2fa91..cfc4df6 100644
--- a/tools/perf/util/evlist.h
+++ b/tools/perf/util/evlist.h
@@ -42,6 +42,7 @@ struct perf_evlist {
 	int		 nr_mmaps;
 	bool		 overwrite;
 	bool		 enabled;
+	bool		 has_user_cpus;
 	size_t		 mmap_len;
 	int		 id_pos;
 	int		 is_pos;

^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [tip:perf/core] perf evlist: Fix splice_list_tail() not setting evlist
  2015-09-08  7:58 ` [PATCH V3 05/14] perf tools: Fix perf_evlist__splice_list_tail not setting evlist Adrian Hunter
@ 2015-09-16  7:32   ` tip-bot for Adrian Hunter
  0 siblings, 0 replies; 34+ messages in thread
From: tip-bot for Adrian Hunter @ 2015-09-16  7:32 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: adrian.hunter, kan.liang, mingo, hpa, acme, jolsa, tglx, linux-kernel

Commit-ID:  f114d6eff76d20b521d8716e969e71b1f56f82b5
Gitweb:     http://git.kernel.org/tip/f114d6eff76d20b521d8716e969e71b1f56f82b5
Author:     Adrian Hunter <adrian.hunter@intel.com>
AuthorDate: Tue, 8 Sep 2015 10:58:53 +0300
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Tue, 15 Sep 2015 10:23:17 -0300

perf evlist: Fix splice_list_tail() not setting evlist

Commit d49e46950772 ("perf evsel: Add a backpointer to the evlist a
evsel is in") updated perf_evlist__add() but not
perf_evlist__splice_list_tail().

This illustrates that it is better if perf_evlist__splice_list_tail()
calls perf_evlist__add() instead of duplicating the logic, so do that.
This will also simplify a subsequent fix for propagating maps.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@intel.com>
Link: http://lkml.kernel.org/r/1441699142-18905-6-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/evlist.c       | 15 +++++++--------
 tools/perf/util/evlist.h       |  3 +--
 tools/perf/util/parse-events.c |  3 +--
 3 files changed, 9 insertions(+), 12 deletions(-)

diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index 3a4445f..961560b 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -136,15 +136,14 @@ void perf_evlist__add(struct perf_evlist *evlist, struct perf_evsel *entry)
 }
 
 void perf_evlist__splice_list_tail(struct perf_evlist *evlist,
-				   struct list_head *list,
-				   int nr_entries)
+				   struct list_head *list)
 {
-	bool set_id_pos = !evlist->nr_entries;
+	struct perf_evsel *evsel, *temp;
 
-	list_splice_tail(list, &evlist->entries);
-	evlist->nr_entries += nr_entries;
-	if (set_id_pos)
-		perf_evlist__set_id_pos(evlist);
+	__evlist__for_each_safe(list, temp, evsel) {
+		list_del_init(&evsel->node);
+		perf_evlist__add(evlist, evsel);
+	}
 }
 
 void __perf_evlist__set_leader(struct list_head *list)
@@ -210,7 +209,7 @@ static int perf_evlist__add_attrs(struct perf_evlist *evlist,
 		list_add_tail(&evsel->node, &head);
 	}
 
-	perf_evlist__splice_list_tail(evlist, &head, nr_attrs);
+	perf_evlist__splice_list_tail(evlist, &head);
 
 	return 0;
 
diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h
index cfc4df6..115d8b5 100644
--- a/tools/perf/util/evlist.h
+++ b/tools/perf/util/evlist.h
@@ -179,8 +179,7 @@ bool perf_evlist__valid_sample_id_all(struct perf_evlist *evlist);
 bool perf_evlist__valid_read_format(struct perf_evlist *evlist);
 
 void perf_evlist__splice_list_tail(struct perf_evlist *evlist,
-				   struct list_head *list,
-				   int nr_entries);
+				   struct list_head *list);
 
 static inline struct perf_evsel *perf_evlist__first(struct perf_evlist *evlist)
 {
diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
index d826e6f..7e8ae21 100644
--- a/tools/perf/util/parse-events.c
+++ b/tools/perf/util/parse-events.c
@@ -1140,10 +1140,9 @@ int parse_events(struct perf_evlist *evlist, const char *str,
 	ret = parse_events__scanner(str, &data, PE_START_EVENTS);
 	perf_pmu__parse_cleanup();
 	if (!ret) {
-		int entries = data.idx - evlist->nr_entries;
 		struct perf_evsel *last;
 
-		perf_evlist__splice_list_tail(evlist, &data.list, entries);
+		perf_evlist__splice_list_tail(evlist, &data.list);
 		evlist->nr_groups += data.nr_groups;
 		last = perf_evlist__last(evlist);
 		last->cmdline_group_boundary = true;

^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [tip:perf/core] perf evlist: Fix missing thread_map__put in propagate_maps()
  2015-09-08  7:58 ` [PATCH V3 06/14] perf tools: Fix missing thread_map__put in perf_evlist__propagate_maps Adrian Hunter
@ 2015-09-16  7:32   ` tip-bot for Adrian Hunter
  0 siblings, 0 replies; 34+ messages in thread
From: tip-bot for Adrian Hunter @ 2015-09-16  7:32 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: acme, kan.liang, linux-kernel, jolsa, hpa, tglx, adrian.hunter, mingo

Commit-ID:  b278c364b35ae940b05f6a9edf8061fc886cd09e
Gitweb:     http://git.kernel.org/tip/b278c364b35ae940b05f6a9edf8061fc886cd09e
Author:     Adrian Hunter <adrian.hunter@intel.com>
AuthorDate: Tue, 8 Sep 2015 10:58:54 +0300
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Tue, 15 Sep 2015 10:24:30 -0300

perf evlist: Fix missing thread_map__put in propagate_maps()

perf_evlist__propagate_maps() incorrectly assumes evsel->threads is NULL
before reassigning it, but it won't be NULL when perf_evlist__set_maps()
is used to set different (or NULL) maps.  Thus thread_map__put must be
used, which works even if evsel->threads is NULL.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@intel.com>
Link: http://lkml.kernel.org/r/1441699142-18905-7-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/evlist.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index 961560b..79056c6 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -1116,6 +1116,7 @@ static void perf_evlist__propagate_maps(struct perf_evlist *evlist)
 			evsel->cpus = cpu_map__get(evlist->cpus);
 		}
 
+		thread_map__put(evsel->threads);
 		evsel->threads = thread_map__get(evlist->threads);
 	}
 }

^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [tip:perf/core] perf evsel: Add own_cpus member
  2015-09-08  7:58 ` [PATCH V3 07/14] perf tools: Add evsel->own_cpus Adrian Hunter
@ 2015-09-16  7:33   ` tip-bot for Adrian Hunter
  0 siblings, 0 replies; 34+ messages in thread
From: tip-bot for Adrian Hunter @ 2015-09-16  7:33 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: jolsa, mingo, kan.liang, hpa, acme, tglx, linux-kernel, adrian.hunter

Commit-ID:  fce4d296b405b03fba033a55017348bf55b10db6
Gitweb:     http://git.kernel.org/tip/fce4d296b405b03fba033a55017348bf55b10db6
Author:     Adrian Hunter <adrian.hunter@intel.com>
AuthorDate: Tue, 8 Sep 2015 10:58:55 +0300
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Tue, 15 Sep 2015 10:41:13 -0300

perf evsel: Add own_cpus member

perf_evlist__propagate_maps() cannot easily tell if an evsel has its own
cpu map.  To make that simpler, keep a copy of the PMU cpu map and
adjust the propagation logic accordingly.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@intel.com>
Link: http://lkml.kernel.org/r/1441699142-18905-8-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/evlist.c       | 5 ++++-
 tools/perf/util/evsel.c        | 1 +
 tools/perf/util/evsel.h        | 1 +
 tools/perf/util/parse-events.c | 4 ++--
 4 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index 79056c6..5bd3b49 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -1111,9 +1111,12 @@ static void perf_evlist__propagate_maps(struct perf_evlist *evlist)
 		 * We already have cpus for evsel (via PMU sysfs) so
 		 * keep it, if there's no target cpu list defined.
 		 */
-		if (!evsel->cpus || evlist->has_user_cpus) {
+		if (!evsel->own_cpus || evlist->has_user_cpus) {
 			cpu_map__put(evsel->cpus);
 			evsel->cpus = cpu_map__get(evlist->cpus);
+		} else if (evsel->cpus != evsel->own_cpus) {
+			cpu_map__put(evsel->cpus);
+			evsel->cpus = cpu_map__get(evsel->own_cpus);
 		}
 
 		thread_map__put(evsel->threads);
diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
index c53f791..5410483 100644
--- a/tools/perf/util/evsel.c
+++ b/tools/perf/util/evsel.c
@@ -1033,6 +1033,7 @@ void perf_evsel__exit(struct perf_evsel *evsel)
 	perf_evsel__free_config_terms(evsel);
 	close_cgroup(evsel->cgrp);
 	cpu_map__put(evsel->cpus);
+	cpu_map__put(evsel->own_cpus);
 	thread_map__put(evsel->threads);
 	zfree(&evsel->group_name);
 	zfree(&evsel->name);
diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h
index 298e6bb..ef8925f 100644
--- a/tools/perf/util/evsel.h
+++ b/tools/perf/util/evsel.h
@@ -98,6 +98,7 @@ struct perf_evsel {
 	struct cgroup_sel	*cgrp;
 	void			*handler;
 	struct cpu_map		*cpus;
+	struct cpu_map		*own_cpus;
 	struct thread_map	*threads;
 	unsigned int		sample_size;
 	int			id_pos;
diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
index 7e8ae21..21ed6ee 100644
--- a/tools/perf/util/parse-events.c
+++ b/tools/perf/util/parse-events.c
@@ -287,8 +287,8 @@ __add_event(struct list_head *list, int *idx,
 	if (!evsel)
 		return NULL;
 
-	if (cpus)
-		evsel->cpus = cpu_map__get(cpus);
+	evsel->cpus     = cpu_map__get(cpus);
+	evsel->own_cpus = cpu_map__get(cpus);
 
 	if (name)
 		evsel->name = strdup(name);

^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [tip:perf/core] perf evlist: Make set_maps() more resilient
  2015-09-08  7:58 ` [PATCH V3 08/14] perf tools: Make perf_evlist__set_maps() more resilient Adrian Hunter
@ 2015-09-16  7:33   ` tip-bot for Adrian Hunter
  0 siblings, 0 replies; 34+ messages in thread
From: tip-bot for Adrian Hunter @ 2015-09-16  7:33 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: kan.liang, acme, hpa, linux-kernel, jolsa, mingo, tglx, adrian.hunter

Commit-ID:  934e0f2053ce299893ca48a411bf7fdc8ac6254f
Gitweb:     http://git.kernel.org/tip/934e0f2053ce299893ca48a411bf7fdc8ac6254f
Author:     Adrian Hunter <adrian.hunter@intel.com>
AuthorDate: Tue, 8 Sep 2015 10:58:56 +0300
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Tue, 15 Sep 2015 10:44:22 -0300

perf evlist: Make set_maps() more resilient

Make perf_evlist__set_maps() more resilient by allowing for the
possibility that one or another of the maps isn't being changed and
therefore should not be "put".

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@intel.com>
Link: http://lkml.kernel.org/r/1441699142-18905-9-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/evlist.c | 19 +++++++++++++++----
 1 file changed, 15 insertions(+), 4 deletions(-)

diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index 5bd3b49..78ff52e 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -1155,11 +1155,22 @@ out_delete_threads:
 void perf_evlist__set_maps(struct perf_evlist *evlist, struct cpu_map *cpus,
 			   struct thread_map *threads)
 {
-	cpu_map__put(evlist->cpus);
-	evlist->cpus = cpus;
+	/*
+	 * Allow for the possibility that one or another of the maps isn't being
+	 * changed i.e. don't put it.  Note we are assuming the maps that are
+	 * being applied are brand new and evlist is taking ownership of the
+	 * original reference count of 1.  If that is not the case it is up to
+	 * the caller to increase the reference count.
+	 */
+	if (cpus != evlist->cpus) {
+		cpu_map__put(evlist->cpus);
+		evlist->cpus = cpus;
+	}
 
-	thread_map__put(evlist->threads);
-	evlist->threads = threads;
+	if (threads != evlist->threads) {
+		thread_map__put(evlist->threads);
+		evlist->threads = threads;
+	}
 
 	perf_evlist__propagate_maps(evlist);
 }

^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [tip:perf/core] perf evlist: Make create_maps() use set_maps()
  2015-09-08  7:58 ` [PATCH V3 09/14] perf tools: Make perf_evlist__create_maps() use perf_evlist__set_maps() Adrian Hunter
@ 2015-09-16  7:33   ` tip-bot for Adrian Hunter
  0 siblings, 0 replies; 34+ messages in thread
From: tip-bot for Adrian Hunter @ 2015-09-16  7:33 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: linux-kernel, tglx, hpa, jolsa, adrian.hunter, mingo, kan.liang, acme

Commit-ID:  74bfd2b25de354feb4484c553dce4fe8d9c3b60b
Gitweb:     http://git.kernel.org/tip/74bfd2b25de354feb4484c553dce4fe8d9c3b60b
Author:     Adrian Hunter <adrian.hunter@intel.com>
AuthorDate: Tue, 8 Sep 2015 10:58:57 +0300
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Tue, 15 Sep 2015 10:45:47 -0300

perf evlist: Make create_maps() use set_maps()

Since there is a function to set maps, perf_evlist__create_maps() should
use it.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@intel.com>
Link: http://lkml.kernel.org/r/1441699142-18905-10-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/evlist.c | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)

diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index 78ff52e..c17f355 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -1126,29 +1126,30 @@ static void perf_evlist__propagate_maps(struct perf_evlist *evlist)
 
 int perf_evlist__create_maps(struct perf_evlist *evlist, struct target *target)
 {
-	evlist->threads = thread_map__new_str(target->pid, target->tid,
-					      target->uid);
+	struct cpu_map *cpus;
+	struct thread_map *threads;
 
-	if (evlist->threads == NULL)
+	threads = thread_map__new_str(target->pid, target->tid, target->uid);
+
+	if (!threads)
 		return -1;
 
 	if (target__uses_dummy_map(target))
-		evlist->cpus = cpu_map__dummy_new();
+		cpus = cpu_map__dummy_new();
 	else
-		evlist->cpus = cpu_map__new(target->cpu_list);
+		cpus = cpu_map__new(target->cpu_list);
 
-	if (evlist->cpus == NULL)
+	if (!cpus)
 		goto out_delete_threads;
 
 	evlist->has_user_cpus = !!target->cpu_list;
 
-	perf_evlist__propagate_maps(evlist);
+	perf_evlist__set_maps(evlist, cpus, threads);
 
 	return 0;
 
 out_delete_threads:
-	thread_map__put(evlist->threads);
-	evlist->threads = NULL;
+	thread_map__put(threads);
 	return -1;
 }
 

^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [tip:perf/core] perf evlist: Factor out a function to propagate maps for a single evsel
  2015-09-08  7:58 ` [PATCH V3 10/14] perf tools: Factor out a function to propagate maps for a single evsel Adrian Hunter
@ 2015-09-16  7:34   ` tip-bot for Adrian Hunter
  0 siblings, 0 replies; 34+ messages in thread
From: tip-bot for Adrian Hunter @ 2015-09-16  7:34 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: acme, jolsa, hpa, tglx, adrian.hunter, linux-kernel, mingo, kan.liang

Commit-ID:  adc0c3e87b0e1baeccabe09b6dba738f17d0e91d
Gitweb:     http://git.kernel.org/tip/adc0c3e87b0e1baeccabe09b6dba738f17d0e91d
Author:     Adrian Hunter <adrian.hunter@intel.com>
AuthorDate: Tue, 8 Sep 2015 10:58:58 +0300
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Tue, 15 Sep 2015 10:54:04 -0300

perf evlist: Factor out a function to propagate maps for a single evsel

Subsequent fixes will need a function that just propagates maps for a
single evsel so factor it out.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@intel.com>
Link: http://lkml.kernel.org/r/1441699142-18905-11-git-send-email-adrian.hunter@intel.com
[ Moved them to before perf_evlist__add() to avoid having to move it in the next patch ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/evlist.c | 49 ++++++++++++++++++++++++++----------------------
 1 file changed, 27 insertions(+), 22 deletions(-)

diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index c17f355..4e840bf 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -124,6 +124,33 @@ void perf_evlist__delete(struct perf_evlist *evlist)
 	free(evlist);
 }
 
+static void __perf_evlist__propagate_maps(struct perf_evlist *evlist,
+					  struct perf_evsel *evsel)
+{
+	/*
+	 * We already have cpus for evsel (via PMU sysfs) so
+	 * keep it, if there's no target cpu list defined.
+	 */
+	if (!evsel->own_cpus || evlist->has_user_cpus) {
+		cpu_map__put(evsel->cpus);
+		evsel->cpus = cpu_map__get(evlist->cpus);
+	} else if (evsel->cpus != evsel->own_cpus) {
+		cpu_map__put(evsel->cpus);
+		evsel->cpus = cpu_map__get(evsel->own_cpus);
+	}
+
+	thread_map__put(evsel->threads);
+	evsel->threads = thread_map__get(evlist->threads);
+}
+
+static void perf_evlist__propagate_maps(struct perf_evlist *evlist)
+{
+	struct perf_evsel *evsel;
+
+	evlist__for_each(evlist, evsel)
+		__perf_evlist__propagate_maps(evlist, evsel);
+}
+
 void perf_evlist__add(struct perf_evlist *evlist, struct perf_evsel *entry)
 {
 	entry->evlist = evlist;
@@ -1102,28 +1129,6 @@ int perf_evlist__mmap(struct perf_evlist *evlist, unsigned int pages,
 	return perf_evlist__mmap_ex(evlist, pages, overwrite, 0, false);
 }
 
-static void perf_evlist__propagate_maps(struct perf_evlist *evlist)
-{
-	struct perf_evsel *evsel;
-
-	evlist__for_each(evlist, evsel) {
-		/*
-		 * We already have cpus for evsel (via PMU sysfs) so
-		 * keep it, if there's no target cpu list defined.
-		 */
-		if (!evsel->own_cpus || evlist->has_user_cpus) {
-			cpu_map__put(evsel->cpus);
-			evsel->cpus = cpu_map__get(evlist->cpus);
-		} else if (evsel->cpus != evsel->own_cpus) {
-			cpu_map__put(evsel->cpus);
-			evsel->cpus = cpu_map__get(evsel->own_cpus);
-		}
-
-		thread_map__put(evsel->threads);
-		evsel->threads = thread_map__get(evlist->threads);
-	}
-}
-
 int perf_evlist__create_maps(struct perf_evlist *evlist, struct target *target)
 {
 	struct cpu_map *cpus;

^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [tip:perf/core] perf evlist: Fix add() not propagating maps
  2015-09-08  7:58 ` [PATCH V3 11/14] perf tools: Fix perf_evlist__add() not propagating maps Adrian Hunter
  2015-09-15 14:18   ` Arnaldo Carvalho de Melo
@ 2015-09-16  7:34   ` tip-bot for Adrian Hunter
  1 sibling, 0 replies; 34+ messages in thread
From: tip-bot for Adrian Hunter @ 2015-09-16  7:34 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: acme, hpa, linux-kernel, jolsa, kan.liang, adrian.hunter, tglx, mingo

Commit-ID:  44c42d71c659527c81bf169808959c9339116d85
Gitweb:     http://git.kernel.org/tip/44c42d71c659527c81bf169808959c9339116d85
Author:     Adrian Hunter <adrian.hunter@intel.com>
AuthorDate: Tue, 8 Sep 2015 10:58:59 +0300
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Tue, 15 Sep 2015 11:01:25 -0300

perf evlist: Fix add() not propagating maps

If evsels are added after maps are created, then they won't have any
maps propagated to them.  Fix that.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@intel.com>
Link: http://lkml.kernel.org/r/1441699142-18905-12-git-send-email-adrian.hunter@intel.com
[ Moved the moving of propagate_maps() to the patch before, so that this
  one does _just_ the one lile fix calling in add()]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/evlist.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index 4e840bf..99267ab 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -160,6 +160,8 @@ void perf_evlist__add(struct perf_evlist *evlist, struct perf_evsel *entry)
 
 	if (!evlist->nr_entries++)
 		perf_evlist__set_id_pos(evlist);
+
+	__perf_evlist__propagate_maps(evlist, entry);
 }
 
 void perf_evlist__splice_list_tail(struct perf_evlist *evlist,

^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [tip:perf/core] perf evlist: Fix create_syswide_maps() not propagating maps
  2015-09-08  7:59 ` [PATCH V3 12/14] perf tools: Fix perf_evlist__create_syswide_maps() " Adrian Hunter
@ 2015-09-16  7:34   ` tip-bot for Adrian Hunter
  0 siblings, 0 replies; 34+ messages in thread
From: tip-bot for Adrian Hunter @ 2015-09-16  7:34 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: mingo, adrian.hunter, tglx, kan.liang, hpa, jolsa, linux-kernel, acme

Commit-ID:  8c0498b6891d7ca5c379c6283de7fc7fe8eebe5c
Gitweb:     http://git.kernel.org/tip/8c0498b6891d7ca5c379c6283de7fc7fe8eebe5c
Author:     Adrian Hunter <adrian.hunter@intel.com>
AuthorDate: Tue, 8 Sep 2015 10:59:00 +0300
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Tue, 15 Sep 2015 11:03:22 -0300

perf evlist: Fix create_syswide_maps() not propagating maps

Fix it by making it call perf_evlist__set_maps() instead of setting the
maps itself.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@intel.com>
Link: http://lkml.kernel.org/r/1441699142-18905-13-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/evlist.c | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)

diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index 99267ab..c8fc8a2 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -1400,6 +1400,8 @@ void perf_evlist__close(struct perf_evlist *evlist)
 
 static int perf_evlist__create_syswide_maps(struct perf_evlist *evlist)
 {
+	struct cpu_map	  *cpus;
+	struct thread_map *threads;
 	int err = -ENOMEM;
 
 	/*
@@ -1411,20 +1413,19 @@ static int perf_evlist__create_syswide_maps(struct perf_evlist *evlist)
 	 * error, and we may not want to do that fallback to a
 	 * default cpu identity map :-\
 	 */
-	evlist->cpus = cpu_map__new(NULL);
-	if (evlist->cpus == NULL)
+	cpus = cpu_map__new(NULL);
+	if (!cpus)
 		goto out;
 
-	evlist->threads = thread_map__new_dummy();
-	if (evlist->threads == NULL)
-		goto out_free_cpus;
+	threads = thread_map__new_dummy();
+	if (!threads)
+		goto out_put;
 
-	err = 0;
+	perf_evlist__set_maps(evlist, cpus, threads);
 out:
 	return err;
-out_free_cpus:
-	cpu_map__put(evlist->cpus);
-	evlist->cpus = NULL;
+out_put:
+	cpu_map__put(cpus);
 	goto out;
 }
 

^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [tip:perf/core] perf tests: Fix task exit test setting maps
  2015-09-08  7:59 ` [PATCH V3 13/14] perf tools: Fix task exit test setting maps Adrian Hunter
@ 2015-09-16  7:35   ` tip-bot for Adrian Hunter
  0 siblings, 0 replies; 34+ messages in thread
From: tip-bot for Adrian Hunter @ 2015-09-16  7:35 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: tglx, acme, hpa, jolsa, mingo, linux-kernel, kan.liang, adrian.hunter

Commit-ID:  2998272275fc31fc3d478ef9c95e7eaef67dafa3
Gitweb:     http://git.kernel.org/tip/2998272275fc31fc3d478ef9c95e7eaef67dafa3
Author:     Adrian Hunter <adrian.hunter@intel.com>
AuthorDate: Tue, 8 Sep 2015 10:59:01 +0300
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Tue, 15 Sep 2015 11:03:58 -0300

perf tests: Fix task exit test setting maps

The test titled "Test number of exit event of a simple workload" was
setting cpu/thread maps directly.  Make it use the proper function
perf_evlist__set_maps() especially now that it also propagates the maps.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@intel.com>
Link: http://lkml.kernel.org/r/1441699142-18905-14-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/tests/task-exit.c | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)

diff --git a/tools/perf/tests/task-exit.c b/tools/perf/tests/task-exit.c
index 3a8fedef..add1638 100644
--- a/tools/perf/tests/task-exit.c
+++ b/tools/perf/tests/task-exit.c
@@ -43,6 +43,8 @@ int test__task_exit(void)
 	};
 	const char *argv[] = { "true", NULL };
 	char sbuf[STRERR_BUFSIZE];
+	struct cpu_map *cpus;
+	struct thread_map *threads;
 
 	signal(SIGCHLD, sig_handler);
 
@@ -58,14 +60,19 @@ int test__task_exit(void)
 	 * perf_evlist__prepare_workload we'll fill in the only thread
 	 * we're monitoring, the one forked there.
 	 */
-	evlist->cpus = cpu_map__dummy_new();
-	evlist->threads = thread_map__new_by_tid(-1);
-	if (!evlist->cpus || !evlist->threads) {
+	cpus = cpu_map__dummy_new();
+	threads = thread_map__new_by_tid(-1);
+	if (!cpus || !threads) {
 		err = -ENOMEM;
 		pr_debug("Not enough memory to create thread/cpu maps\n");
-		goto out_delete_evlist;
+		goto out_free_maps;
 	}
 
+	perf_evlist__set_maps(evlist, cpus, threads);
+
+	cpus	= NULL;
+	threads = NULL;
+
 	err = perf_evlist__prepare_workload(evlist, &target, argv, false,
 					    workload_exec_failed_signal);
 	if (err < 0) {
@@ -114,6 +121,9 @@ retry:
 		err = -1;
 	}
 
+out_free_maps:
+	cpu_map__put(cpus);
+	thread_map__put(threads);
 out_delete_evlist:
 	perf_evlist__delete(evlist);
 	return err;

^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [tip:perf/core] perf tests: Fix software clock events test setting maps
  2015-09-08  7:59 ` [PATCH V3 14/14] perf tools: Fix software clock events " Adrian Hunter
@ 2015-09-16  7:35   ` tip-bot for Adrian Hunter
  0 siblings, 0 replies; 34+ messages in thread
From: tip-bot for Adrian Hunter @ 2015-09-16  7:35 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: hpa, adrian.hunter, mingo, linux-kernel, acme, jolsa, kan.liang, tglx

Commit-ID:  c5e6bd2ed3e81df443e4ae11e95ed71ff77bf9e5
Gitweb:     http://git.kernel.org/tip/c5e6bd2ed3e81df443e4ae11e95ed71ff77bf9e5
Author:     Adrian Hunter <adrian.hunter@intel.com>
AuthorDate: Tue, 8 Sep 2015 10:59:02 +0300
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Tue, 15 Sep 2015 11:04:49 -0300

perf tests: Fix software clock events test setting maps

The test titled "Test software clock events have valid period values"
was setting cpu/thread maps directly.  Make it use the proper function
perf_evlist__set_maps() especially now that it also propagates the maps.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@intel.com>
Link: http://lkml.kernel.org/r/1441699142-18905-15-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/tests/sw-clock.c | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)

diff --git a/tools/perf/tests/sw-clock.c b/tools/perf/tests/sw-clock.c
index 1aa21c9..5b83f56 100644
--- a/tools/perf/tests/sw-clock.c
+++ b/tools/perf/tests/sw-clock.c
@@ -34,6 +34,8 @@ static int __test__sw_clock_freq(enum perf_sw_ids clock_id)
 		.disabled = 1,
 		.freq = 1,
 	};
+	struct cpu_map *cpus;
+	struct thread_map *threads;
 
 	attr.sample_freq = 500;
 
@@ -50,14 +52,19 @@ static int __test__sw_clock_freq(enum perf_sw_ids clock_id)
 	}
 	perf_evlist__add(evlist, evsel);
 
-	evlist->cpus = cpu_map__dummy_new();
-	evlist->threads = thread_map__new_by_tid(getpid());
-	if (!evlist->cpus || !evlist->threads) {
+	cpus = cpu_map__dummy_new();
+	threads = thread_map__new_by_tid(getpid());
+	if (!cpus || !threads) {
 		err = -ENOMEM;
 		pr_debug("Not enough memory to create thread/cpu maps\n");
-		goto out_delete_evlist;
+		goto out_free_maps;
 	}
 
+	perf_evlist__set_maps(evlist, cpus, threads);
+
+	cpus	= NULL;
+	threads = NULL;
+
 	if (perf_evlist__open(evlist)) {
 		const char *knob = "/proc/sys/kernel/perf_event_max_sample_rate";
 
@@ -107,6 +114,9 @@ next_event:
 		err = -1;
 	}
 
+out_free_maps:
+	cpu_map__put(cpus);
+	thread_map__put(threads);
 out_delete_evlist:
 	perf_evlist__delete(evlist);
 	return err;

^ permalink raw reply related	[flat|nested] 34+ messages in thread

end of thread, other threads:[~2015-09-16  7:35 UTC | newest]

Thread overview: 34+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-09-08  7:58 [PATCH V3 00/14] perf tools: Fix gaps propagating maps Adrian Hunter
2015-09-08  7:58 ` [PATCH V3 01/14] perf tools: Simplify perf_evlist__propagate_maps logic Adrian Hunter
2015-09-16  7:30   ` [tip:perf/core] perf evlist: Simplify propagate_maps() logic tip-bot for Adrian Hunter
2015-09-08  7:58 ` [PATCH V3 02/14] perf tools: Simplify perf_evlist__set_maps logic Adrian Hunter
2015-09-16  7:31   ` [tip:perf/core] perf evlist: Simplify set_maps() logic tip-bot for Adrian Hunter
2015-09-08  7:58 ` [PATCH V3 03/14] perf tools: Remove redundant validation from perf_evlist__propagate_maps Adrian Hunter
2015-09-16  7:31   ` [tip:perf/core] perf evlist: Remove redundant validation from propagate_maps() tip-bot for Adrian Hunter
2015-09-08  7:58 ` [PATCH V3 04/14] perf tools: Add evlist->has_user_cpus Adrian Hunter
2015-09-16  7:32   ` [tip:perf/core] perf evlist: Add has_user_cpus member tip-bot for Adrian Hunter
2015-09-08  7:58 ` [PATCH V3 05/14] perf tools: Fix perf_evlist__splice_list_tail not setting evlist Adrian Hunter
2015-09-16  7:32   ` [tip:perf/core] perf evlist: Fix splice_list_tail() " tip-bot for Adrian Hunter
2015-09-08  7:58 ` [PATCH V3 06/14] perf tools: Fix missing thread_map__put in perf_evlist__propagate_maps Adrian Hunter
2015-09-16  7:32   ` [tip:perf/core] perf evlist: Fix missing thread_map__put in propagate_maps() tip-bot for Adrian Hunter
2015-09-08  7:58 ` [PATCH V3 07/14] perf tools: Add evsel->own_cpus Adrian Hunter
2015-09-16  7:33   ` [tip:perf/core] perf evsel: Add own_cpus member tip-bot for Adrian Hunter
2015-09-08  7:58 ` [PATCH V3 08/14] perf tools: Make perf_evlist__set_maps() more resilient Adrian Hunter
2015-09-16  7:33   ` [tip:perf/core] perf evlist: Make set_maps() " tip-bot for Adrian Hunter
2015-09-08  7:58 ` [PATCH V3 09/14] perf tools: Make perf_evlist__create_maps() use perf_evlist__set_maps() Adrian Hunter
2015-09-16  7:33   ` [tip:perf/core] perf evlist: Make create_maps() use set_maps() tip-bot for Adrian Hunter
2015-09-08  7:58 ` [PATCH V3 10/14] perf tools: Factor out a function to propagate maps for a single evsel Adrian Hunter
2015-09-16  7:34   ` [tip:perf/core] perf evlist: " tip-bot for Adrian Hunter
2015-09-08  7:58 ` [PATCH V3 11/14] perf tools: Fix perf_evlist__add() not propagating maps Adrian Hunter
2015-09-15 14:18   ` Arnaldo Carvalho de Melo
2015-09-16  7:34   ` [tip:perf/core] perf evlist: Fix add() " tip-bot for Adrian Hunter
2015-09-08  7:59 ` [PATCH V3 12/14] perf tools: Fix perf_evlist__create_syswide_maps() " Adrian Hunter
2015-09-16  7:34   ` [tip:perf/core] perf evlist: Fix create_syswide_maps() " tip-bot for Adrian Hunter
2015-09-08  7:59 ` [PATCH V3 13/14] perf tools: Fix task exit test setting maps Adrian Hunter
2015-09-16  7:35   ` [tip:perf/core] perf tests: " tip-bot for Adrian Hunter
2015-09-08  7:59 ` [PATCH V3 14/14] perf tools: Fix software clock events " Adrian Hunter
2015-09-16  7:35   ` [tip:perf/core] perf tests: " tip-bot for Adrian Hunter
2015-09-08  8:08 ` [PATCH V3 00/14] perf tools: Fix gaps propagating maps Jiri Olsa
2015-09-15  6:52   ` Adrian Hunter
2015-09-15 13:06     ` Arnaldo Carvalho de Melo
2015-09-15 14:17     ` Arnaldo Carvalho de Melo

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).