Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1220570 > unrolled thread

[PATCH V3 11/14] perf tools: Fix perf_evlist__add() not propagating maps

Started byAdrian Hunter <adrian.hunter@intel.com>
First post2015-09-08 10:10 +0200
Last post2015-09-16 09:40 +0200
Articles 3 — 3 participants

Back to article view | Back to linux.kernel

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

  [PATCH V3 11/14] perf tools: Fix perf_evlist__add() not propagating maps Adrian Hunter <adrian.hunter@intel.com> - 2015-09-08 10:10 +0200
    Re: [PATCH V3 11/14] perf tools: Fix perf_evlist__add() not  propagating maps Arnaldo Carvalho de Melo <acme@redhat.com> - 2015-09-15 16:20 +0200
    [tip:perf/core] perf evlist: Fix add() not propagating maps tip-bot for Adrian Hunter <tipbot@zytor.com> - 2015-09-16 09:40 +0200

#1220570 — [PATCH V3 11/14] perf tools: Fix perf_evlist__add() not propagating maps

FromAdrian Hunter <adrian.hunter@intel.com>
Date2015-09-08 10:10 +0200
Subject[PATCH V3 11/14] perf tools: Fix perf_evlist__add() not propagating maps
Message-ID<q6m8z-6Rc-35@gated-at.bofh.it>
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

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [next] | [standalone]


#1225163 — Re: [PATCH V3 11/14] perf tools: Fix perf_evlist__add() not propagating maps

FromArnaldo Carvalho de Melo <acme@redhat.com>
Date2015-09-15 16:20 +0200
SubjectRe: [PATCH V3 11/14] perf tools: Fix perf_evlist__add() not propagating maps
Message-ID<q8Zfs-7ex-27@gated-at.bofh.it>
In reply to#1220570

[Multipart message — attachments visible in raw view] — view raw

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

[toc] | [prev] | [next] | [standalone]


#1225782 — [tip:perf/core] perf evlist: Fix add() not propagating maps

Fromtip-bot for Adrian Hunter <tipbot@zytor.com>
Date2015-09-16 09:40 +0200
Subject[tip:perf/core] perf evlist: Fix add() not propagating maps
Message-ID<q9ftU-6eY-19@gated-at.bofh.it>
In reply to#1220570
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,
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web