Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1220570 > unrolled thread
| Started by | Adrian Hunter <adrian.hunter@intel.com> |
|---|---|
| First post | 2015-09-08 10:10 +0200 |
| Last post | 2015-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.
[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
| From | Adrian Hunter <adrian.hunter@intel.com> |
|---|---|
| Date | 2015-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]
| From | Arnaldo Carvalho de Melo <acme@redhat.com> |
|---|---|
| Date | 2015-09-15 16:20 +0200 |
| Subject | Re: [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]
| From | tip-bot for Adrian Hunter <tipbot@zytor.com> |
|---|---|
| Date | 2015-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