diff options
author | Jiri Olsa <jolsa@kernel.org> | 2015-06-22 18:36:06 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2015-06-25 14:15:51 -0400 |
commit | b7f0c203586b91419ff9aa9b1115e261082ff5b4 (patch) | |
tree | d9733ff295a7b4ef1e898e60052b45b1be4b5ac6 /tools/perf | |
parent | 186fbb7432f4a740b4fbaf4145375442210110bb (diff) |
perf evlist: Propagate cpu maps to evsels in an evlist
Propagate evlist's cpu_map object through all the evsel objects, while
keeping already configured evsel->cpus.
It'll be handy to access evsel's cpus directly in following patches.
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/r/1435012588-9007-6-git-send-email-jolsa@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf')
-rw-r--r-- | tools/perf/util/evlist.c | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c index a8d18a3d2164..214affaf1cf6 100644 --- a/tools/perf/util/evlist.c +++ b/tools/perf/util/evlist.c | |||
@@ -1101,6 +1101,29 @@ int perf_evlist__mmap(struct perf_evlist *evlist, unsigned int pages, | |||
1101 | return perf_evlist__mmap_ex(evlist, pages, overwrite, 0, false); | 1101 | return perf_evlist__mmap_ex(evlist, pages, overwrite, 0, false); |
1102 | } | 1102 | } |
1103 | 1103 | ||
1104 | static int perf_evlist__propagate_maps(struct perf_evlist *evlist, | ||
1105 | struct target *target) | ||
1106 | { | ||
1107 | struct perf_evsel *evsel; | ||
1108 | |||
1109 | evlist__for_each(evlist, evsel) { | ||
1110 | /* | ||
1111 | * We already have cpus for evsel (via PMU sysfs) so | ||
1112 | * keep it, if there's no target cpu list defined. | ||
1113 | */ | ||
1114 | if (evsel->cpus && target->cpu_list) | ||
1115 | cpu_map__put(evsel->cpus); | ||
1116 | |||
1117 | if (!evsel->cpus || target->cpu_list) | ||
1118 | evsel->cpus = cpu_map__get(evlist->cpus); | ||
1119 | |||
1120 | if (!evsel->cpus) | ||
1121 | return -ENOMEM; | ||
1122 | } | ||
1123 | |||
1124 | return 0; | ||
1125 | } | ||
1126 | |||
1104 | int perf_evlist__create_maps(struct perf_evlist *evlist, struct target *target) | 1127 | int perf_evlist__create_maps(struct perf_evlist *evlist, struct target *target) |
1105 | { | 1128 | { |
1106 | evlist->threads = thread_map__new_str(target->pid, target->tid, | 1129 | evlist->threads = thread_map__new_str(target->pid, target->tid, |
@@ -1117,7 +1140,7 @@ int perf_evlist__create_maps(struct perf_evlist *evlist, struct target *target) | |||
1117 | if (evlist->cpus == NULL) | 1140 | if (evlist->cpus == NULL) |
1118 | goto out_delete_threads; | 1141 | goto out_delete_threads; |
1119 | 1142 | ||
1120 | return 0; | 1143 | return perf_evlist__propagate_maps(evlist, target); |
1121 | 1144 | ||
1122 | out_delete_threads: | 1145 | out_delete_threads: |
1123 | thread_map__put(evlist->threads); | 1146 | thread_map__put(evlist->threads); |